Czy można znaleźć foreachindeks?
w forpętli, jak następuje:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i da ci indeks.
Czy muszę korzystać z forpętli, czy jest jakiś sposób na uzyskanie indeksu w foreachpętli?
Czy można znaleźć foreachindeks?
w forpętli, jak następuje:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i da ci indeks.
Czy muszę korzystać z forpętli, czy jest jakiś sposób na uzyskanie indeksu w foreachpętli?
Odpowiedzi:
foreach($array as $key=>$value) {
// do stuff
}
$keyjest indeksem każdego $arrayelementu
$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 fordaje ci pętla w tablicy indeksowanej numerycznie. Takim polem byłby pseudoindeks, który wymaga ręcznego zarządzania (przyrosty itp.).
A foreachda ci indeks w postaci $keywartoś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.
$keyfrom $key=>$value) ... Założę się jednak, że niższa wydajność jest nieistotna / odczuwalna w prostej pętli.
Możesz tworzyć $ipoza 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 forpę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
$loopZmienna 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
}