Risposte:
foreach($array as $key=>$value) {
// do stuff
}
$key
è l'indice di ciascun $array
elemento
$myarr['foo'] = 'bar';
questo metodo fallisca
vatiable++;
ogni iterazione. Il modo tradizionale, ma ha sempre funzionato.
Puoi inserire un hack nel tuo foreach
, come ad esempio un campo incrementato su ogni run-through, che è esattamente quello for
che ti dà il loop in un array indicizzato numericamente. Un tale campo sarebbe uno pseudo-indice che necessita di una gestione manuale (incrementi, ecc.).
A foreach
ti darà il tuo indice nella forma del tuo $key
valore, quindi un tale hack non dovrebbe essere necessario.
ad es. in a foreach
$index = 0;
foreach($data as $key=>$val) {
// Use $key as an index, or...
// ... manage the index this way..
echo "Index is $index\n";
$index++;
}
Va notato che è possibile chiamare key()
qualsiasi array per trovare il tasto corrente acceso. Come puoi immaginare current()
, restituirà il valore corrente e next()
sposta il puntatore dell'array sull'elemento successivo.
$key
da $key=>$value
) ... Tuttavia, scommetto che le prestazioni inferiori non sono significative / percepibili in un semplice ciclo.
È possibile creare $i
al di fuori del ciclo e fare $i++
nella parte inferiore del ciclo.
Questi due anelli sono equivalenti (esclude ovviamente le ringhiere di sicurezza):
for ($i=0; $i<count($things); $i++) { ... }
foreach ($things as $i=>$thing) { ... }
per esempio
for ($i=0; $i<count($things); $i++) {
echo "Thing ".$i." is ".$things[$i];
}
foreach ($things as $i=>$thing) {
echo "Thing ".$i." is ".$thing;
}
Penso che l'opzione migliore sia la stessa:
foreach ($lists as $key=>$value) {
echo $key+1;
}
è facile e normalmente
Jonathan ha ragione. Le matrici PHP fungono da tabella di mappatura associando le chiavi ai valori. in alcuni casi è possibile ottenere un indice se l'array è definito, ad esempio
$var = array(2,5);
for ($i = 0; $i < count($var); $i++) {
echo $var[$i]."\n";
}
il tuo output sarà
2
5
nel qual caso ogni elemento dell'array ha un indice conoscibile, ma se poi fai qualcosa come il seguente
$var = array_push($var,10);
for ($i = 0; $i < count($var); $i++) {
echo $var[$i]."\n";
}
non si ottiene alcun output. Ciò accade perché le matrici in PHP non sono strutture lineari come nella maggior parte delle lingue. Sono più simili alle tabelle hash che possono avere o meno chiavi per tutti i valori memorizzati. Quindi foreach non usa gli indici per strisciare su di essi perché hanno un indice solo se l'array è definito. Se è necessario disporre di un indice, assicurarsi che gli array siano completamente definiti prima di eseguire la scansione su di essi e utilizzare un ciclo for.
$var[] = 10;
(consultare il link PHP per guidare), quindi il secondo for
loop fornisce i risultati previsti.
Normalmente lo faccio quando lavoro con array associativi:
foreach ($assoc_array as $key => $value) {
//do something
}
Funzionerà bene anche con array non associativi. La chiave $ sarà il valore dell'indice. Se preferisci, puoi fare anche questo:
foreach ($array as $indx => $value) {
//do something
}
Vorrei aggiungere questo, l'ho usato in laravel solo per indicizzare la mia tabella:
Il mio codice:
@foreach($resultsPerCountry->first()->studies as $result)
<tr>
<td>{{ ++$loop->index}}</td>
</tr>
@endforeach
$loop
variabile non può essere utilizzata perché è richiesta PHP generale.
Ho risolto in questo modo, quando ho dovuto utilizzare l'indice foreach e il valore nello stesso contesto:
$array = array('a', 'b', 'c');
foreach ($array as $letter=>$index) {
echo $letter; //Here $letter content is the actual index
echo $array[$letter]; // echoes the array value
}//foreach
foreach(array_keys($array) as $key) {
// do stuff
}