equivalente di ciascun () per risultati mysql, per imitare primo anello di foreach ()
Domanda
Ho visto il codice su cui sto lavorando, il seguente:
foreach( $mysql_result as $row ) $site_id = $row->id;
$ mysql_result è, naturalmente, un mysql_result, quindi questo foreach è equivalente a un po '(mysql_fetch_row ())
A volte, il risultato è noto per produrre una sola fila, ma il codice ha ancora un "foreach" quindi dà l'impressione di essere un ciclo attraverso molte righe.
Ho provato ad utilizzare ciascuna (), ma non funziona per questo.
So che potrei usare mysql_fetch_row (), ma il codice dovrebbe essere DB indipendente, quindi non è possibile utilizzare funzioni specifiche DB. C'è qualcosa di simile each () che funziona in questo caso come la prima iterazione di foreach ()?
PS: quello che faccio attualmente per migliorare la leggibilità è girare l'esempio precedente a questo:
foreach( $mysql_result as $row ) break;
$site_id = $row->id;
Quindi è abbastanza ovvio che il foreach sarà al massimo del ciclo solo una volta.
Soluzione
Credo che quello che vuoi è invece di questo:
foreach( $mysql_result as $row ) $site_id = $row->id;
Proprio questo:
$site_id = $mysql_result[0]->id;
Altri suggerimenti
PS: quello che faccio attualmente per leggibilità è girare la precedente esempio per questo:
foreach ($ mysql_result da $ riga) break;
Avvolgere che in una funzione in modo che sia chiaro che si ottiene una riga (e sono tuttora indipendente db)
function fetch_single_row($result)
{
foreach( $mysql_result as $row ) break;
return $row;
}
Poi il codice sarà simile
$row = fetch_single_row($mysql_result);
$site_id = $row->id;
Ora non si deve preoccupare di tutta la pausa strana foreach (..); dichiarazioni di tutto il codice.
Se si desidera un solo risultato, quindi non c'è bisogno di loop.
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
$site_id = $row['id'];
È possibile utilizzare un ciclo Do
$i =0
do {
$site_id = $mysql_result[$i++]->id;
} while ($i <= 0);
E 'questo quello che vuoi?
if ( 1 == count( $mysql_result ) )
{
$row = current( $mysql_result );
// could probably also do this unless the array isn't zero-indexed
// $row = $mysql_result[0];
}