2014-10-10 25 views
11

ho un po 'di dilemma, In PHP sia ciclo foreach e while sembrano fare esattamente la stessa cosa in questa situazione:ciclo foreach vs ciclo while risultati

foreach($execute->result as $item){ 
    echo $item['user_pass'].'<br />'; 
} 

E

while($row = mysqli_fetch_assoc($execute->result)){ 
    echo $row['user_pass'].'<br />'; 
} 

La mia domanda è: ci sono delle vere differenze ...? quando sarebbe meglio usarne uno rispetto a un altro o va bene usare entrambi ....? Qualcuno di questi due ti dà potenziale maggiore felicità ...?

+0

Non sono sicuro, utilizzo sempre un ciclo while per il database seleziona – boomoto

+1

Non penso che questa domanda sia un duplicato di quella pubblicata, però. – Qualcuno

+0

@Qualcuno In realtà, hai ragione. Più simile a un duplicato di http://stackoverflow.com/questions/3304885/whilelistkey-value-eacharray-vs-foreacharray-as-key-value che menzioni '(Traversable)' nella tua risposta. Se OP vuole riaprire, lui/lei può contestarlo. –

risposta

2

In questo caso sono esattamente equivalenti. Il mysqli_result implementa l'interfaccia Traversable (come documentato qui: http://www.php.net/mysqli_result) in modo che possa essere iterato utilizzando anche un ciclo foreach.

Suppongo che, internamente, chiamando foreach su un oggetto mysqli_result esegue le chiamate a mysqli_fetch_assoc pure.

Non credo che faccia alcuna differenza usare il primo metodo o il secondo; tuttavia, la prima sembra più carina e "più PHP5" per me!
Parlando di flessibilità, il primo è sicuramente più flessibile, in quanto è possibile utilizzare quel codice con qualsiasi oggetto che implementa Traversable e non solo mysqli_result.

+0

Filosoficamente, sembra più pulito iterare sugli elementi dell'elenco, quindi per verificare se siamo alla fine dell'elenco e quindi iterare all'elemento successivo, quindi sono d'accordo. –

0

ho trovato questo:

for vs foreach vs while which is faster for iterating through arrays in php

la risposta afferma che una differenza di velocità è così minima che poco importa che si utilizza. Direi di usare il ciclo più veloce perché l'efficienza è sempre importante. Anche se stai lesinando sul ciclo appropriato stai facendo del male agli utenti e poi finisci con tempi di caricamento più lunghi. un secondo al secondo. Fanno alla fine giorni e mesi.

Mi piace usare i cicli foreach per iterare sulle informazioni restituite perché ho accesso alle chiavi e ai valori, che possono essere utili a seconda dell'uso necessario.

$returned = array(array("userName" => "Tim"),array("userName" => "Bob"), array("userName" => "Guy")); 

foreach($returned as $L1) 
{ 
    foreach($L1 as $L2 => $val) 
    { 
     if($L2 === "userName") 
     { 

     echo 'Hello: ' . $val . "<br />"; 

     } 

    } 

} 

Immagino che dipende da quali valori è necessario, quanto controllo avete bisogno, e dove serve.

+1

il modo in cui differisce da 'while' e' each' –

+0

Stavo solo affermando ciò che mi piace usare e offrendo ciò che un altro post ha offerto in termini di velocità. Non avere una mucca, lol. – user2296112