2009-08-17 13 views
1

j'ai vu dans le code que je travaille, ce qui suit:équivalent de each() pour les résultats de MySQL, pour mimer première boucle de foreach()

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

mysql_result de $ est, bien sûr, une mysql_result, donc ce foreach équivaut à un certain temps (mysql_fetch_row())

Parfois, le résultat est connu pour produire une seule ligne, mais le code a encore un « foreach » il donne l'impression d'être boucle à travers de nombreuses lignes.

J'ai essayé d'utiliser chaque() mais ne fonctionne pas pour cela. Je sais que je pourrais utiliser mysql_fetch_row(), mais le code devrait être indépendant de DB, donc je ne peux pas utiliser les fonctions spécifiques de DB. Y at-il quelque chose comme chaque() qui fonctionne dans ce cas, tout comme la première itération de foreach()?

PS: ce que je fais actuellement la lisibilité est tour l'exemple précédent à ceci:

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

Il est assez évident que le foreach sera à la boucle plus qu'une seule fois.

Répondre

3

Je pense que ce que vous voulez est au lieu de cela:

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

Juste ceci:

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

Est-ce ce que vous voulez?

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

Je pense courant() ne la même manière each() fait. En es-tu sûr? Je vais l'essayer. – Petruza

0

Si vous voulez seulement un résultat, vous n'avez pas besoin de boucler.

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

PS: ce que je fais actuellement la lisibilité est à son tour la précédente exemple à ceci:

foreach ($ mysql_result as $ row) pause;

Wrap que dans une fonction il est donc clair qu'il obtient une ligne (et sont encore indépendants db)

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

Ensuite, votre code ressemblerait

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

Maintenant vous avez gagné » Je dois m'interroger sur tous les étranges foreach (..) break; déclarations partout dans le code.

0

Vous ould utiliser une boucle do

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