MySQL sonuçlar için her bir eşdeğer (), birinci foreach döngü () taklit etmek için

5 Cevap php

Ben şu, üzerinde çalışıyorum kod gördüm:

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

() Mysql_fetch_row () $ mysql_result, elbette bir mysql_result, yani bu foreach bir süre eşdeğerdir

Bazen, sonuç sadece bir satır verim bilinen, ancak kod hala bu kadar gives the impression birçok satırlar aracılığıyla bir döngü olma "foreach" vardır.

Ben her kullanarak çalıştı () ama bunun için çalışmıyor.

I know I could use mysql_fetch_row(), but the code should be DB independent so I can't use DB specific functions. Is there something like each() that works in this case just as the first iteration of foreach() ?

PS: ne okunabilmesi için şu anda yapmak bu için önceki örneği açmak olduğunu:

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

Bu yüzden foreach olacak çoğu döngü sadece bir kez oldukça açıktır.

5 Cevap

Ben ne istiyorum bunun yerine olduğunu düşünüyorum:

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

Sadece bu:

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

PS: what I do currently for readability is turn the previous example to this:

foreach( $mysql_result as $row ) break;

Bu yüzden bir satır alır açık (ve hala db bağımsız olan) bir işlevi olduğunu Wrap

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

Sonra kod gibi görünür

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

Şimdi tüm garip foreach (..) mola hakkında merak zorunda kalmazsınız; Tüm kod üzerinde ifadeler.

Eğer tek bir sonuç istiyorsanız, o zaman döngü gerekmez.

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

Sen bir do döngü kullanmak ould

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

İstediğin bu mu?

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];
}