equivalente di ciascun () per risultati mysql, per imitare primo anello di foreach ()

StackOverflow https://stackoverflow.com/questions/1290303

  •  18-09-2019
  •  | 
  •  

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.

È stato utile?

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];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top