equivalente de cada () para resultados mysql, a primeira alça de imitador de foreach ()

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

  •  18-09-2019
  •  | 
  •  

Pergunta

Eu vi no código que eu estou trabalhando, o seguinte:

foreach( $mysql_result as $row ) $site_id = $row->id;

$ mysql_result é, claro, um mysql_result, de modo que este foreach é equivalente a um tempo (mysql_fetch_row ())

Às vezes, o resultado é conhecido por produzir apenas uma linha, mas o código ainda tem um "foreach" para que ele dá a impressão de ser um loop através de várias linhas.

Eu tentei usar cada (), mas não funciona para isso.

Eu sei que eu poderia usar mysql_fetch_row (), mas o código deve ser DB independente, então não posso usar funções específicas DB. Existe algo parecido com each () que as obras neste caso apenas como a primeira iteração foreach ()?

PS: o que eu faço atualmente para legibilidade é transformar o exemplo anterior a esta:

foreach( $mysql_result as $row ) break;
$site_id = $row->id;

Por isso, é bastante óbvio que a vontade foreach no máximo de loop apenas uma vez.

Foi útil?

Solução

Eu acho que você quer é, em vez disso:

foreach( $mysql_result as $row ) $site_id = $row->id;

Apenas isto:

$site_id = $mysql_result[0]->id;

Outras dicas

PS: o que eu faço hoje para legibilidade é transformar o anterior exemplo para isso:

foreach ($ mysql_result quanto $ linha) break;

dispor que em uma função, por isso é claro que ele recebe uma linha (e ainda são db independente)

function fetch_single_row($result) 
{
  foreach( $mysql_result as $row ) break;
  return $row;
}

Em seguida, o código ficaria assim

$row = fetch_single_row($mysql_result);
$site_id = $row->id;

Agora você não terá que se perguntar sobre todo o intervalo a estranha foreach (..); declarações por todo o código.

Se você quer apenas um resultado, então você não precisa loop.

$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
$site_id = $row['id'];

Você pode usar um loop Do

$i =0
do {
    $site_id = $mysql_result[$i++]->id;
} while ($i <= 0);

É isso que você quer?

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];
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top