Czy można znaleźć foreach
indeks?
w for
pętli, jak następuje:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i
da ci indeks.
Czy muszę korzystać z for
pętli, czy jest jakiś sposób na uzyskanie indeksu w foreach
pętli?
Czy można znaleźć foreach
indeks?
w for
pętli, jak następuje:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i
da ci indeks.
Czy muszę korzystać z for
pętli, czy jest jakiś sposób na uzyskanie indeksu w foreach
pętli?
Odpowiedzi:
foreach($array as $key=>$value) {
// do stuff
}
$key
jest indeksem każdego $array
elementu
$myarr['foo'] = 'bar';
ta metoda zawiedzie
vatiable++;
każdą iteracją. Tradycyjny sposób, ale zawsze działał.
Możesz wprowadzić hak foreach
, np. Pole zwiększane przy każdym przejściu, co jest dokładnie tym, co for
daje ci pętla w tablicy indeksowanej numerycznie. Takim polem byłby pseudoindeks, który wymaga ręcznego zarządzania (przyrosty itp.).
A foreach
da ci indeks w postaci $key
wartości, więc taki hack nie powinien być konieczny.
np. w 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++;
}
Należy zauważyć, że możesz wywołać key()
dowolną tablicę, aby znaleźć bieżący klucz. Jak można się domyślić current()
, zwróci bieżącą wartość i next()
przeniesie wskaźnik tablicy do następnego elementu.
$key
from $key=>$value
) ... Założę się jednak, że niższa wydajność jest nieistotna / odczuwalna w prostej pętli.
Możesz tworzyć $i
poza pętlą i robić $i++
na dole pętli.
Te dwie pętle są równoważne (oczywiście poza barierkami bezpieczeństwa):
for ($i=0; $i<count($things); $i++) { ... }
foreach ($things as $i=>$thing) { ... }
na przykład
for ($i=0; $i<count($things); $i++) {
echo "Thing ".$i." is ".$things[$i];
}
foreach ($things as $i=>$thing) {
echo "Thing ".$i." is ".$thing;
}
Myślę, że najlepsza opcja jest taka sama:
foreach ($lists as $key=>$value) {
echo $key+1;
}
to jest łatwe i normalne
Jonathan ma rację. Macierze PHP działają jak klucze mapujące tablice map do wartości. w niektórych przypadkach można uzyskać indeks, jeśli tablica jest zdefiniowana, np
$var = array(2,5);
for ($i = 0; $i < count($var); $i++) {
echo $var[$i]."\n";
}
twój wynik będzie
2
5
w takim przypadku każdy element w tablicy ma możliwy do poznania indeks, ale jeśli zrobisz coś takiego:
$var = array_push($var,10);
for ($i = 0; $i < count($var); $i++) {
echo $var[$i]."\n";
}
nie masz wyjścia. Dzieje się tak, ponieważ tablice w PHP nie są strukturami liniowymi, tak jak w większości języków. Bardziej przypominają tabele skrótów, które mogą mieć klucze do wszystkich przechowywanych wartości lub nie. Dlatego foreach nie używa indeksów do indeksowania nad nimi, ponieważ mają indeks tylko wtedy, gdy tablica jest zdefiniowana. Jeśli potrzebujesz indeksu, upewnij się, że tablice są w pełni zdefiniowane, zanim zaczniesz się nad nimi przeszukiwać, i użyj pętli for.
$var[] = 10;
(patrz łącze PHP do przewodnika), aby druga for
pętla generowała oczekiwane wyniki.
Zwykle robię to podczas pracy z tablicami asocjacyjnymi:
foreach ($assoc_array as $key => $value) {
//do something
}
Działa to również dobrze z tablicami niepowiązanymi. $ key będzie wartością indeksu. Jeśli wolisz, możesz to zrobić:
foreach ($array as $indx => $value) {
//do something
}
Chciałbym to dodać, użyłem tego w laravel, aby po prostu zindeksować moją tabelę:
Mój kod:
@foreach($resultsPerCountry->first()->studies as $result)
<tr>
<td>{{ ++$loop->index}}</td>
</tr>
@endforeach
$loop
Zmienna nie może być używany, ponieważ jest proszony o ogólnym PHP.
Rozwiązałem w ten sposób, gdy musiałem użyć indeksu foreach i wartości w tym samym kontekście:
$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
}