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?
foreach($array as $key=>$value) {
// do stuff
}
$key
jest indeksem każdego $array
elementu
$myarr['foo'] = 'bar';
ta metoda zawiedzievatiable++;
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, cofor
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
źródło
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ść inext()
przeniesie wskaźnik tablicy do następnego elementu.źródło
$key
from$key=>$value
) ... Założę się jednak, że niższa wydajność jest nieistotna / odczuwalna w prostej pętli.Owen ma dobrą odpowiedź. Jeśli potrzebujesz tylko klucza i pracujesz z tablicą, może to być również przydatne.
źródło
foreach(array_keys($array) as $index=>$key)
.Możesz tworzyć
$i
poza pętlą i robić$i++
na dole pętli.źródło
Te dwie pętle są równoważne (oczywiście poza barierkami bezpieczeństwa):
na przykład
źródło
Myślę, że najlepsza opcja jest taka sama:
to jest łatwe i normalne
źródło
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
twój wynik będzie
w takim przypadku każdy element w tablicy ma możliwy do poznania indeks, ale jeśli zrobisz coś takiego:
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.
źródło
$var[] = 10;
(patrz łącze PHP do przewodnika), aby drugafor
pętla generowała oczekiwane wyniki.Macierze PHP mają wewnętrzne wskaźniki, więc spróbuj tego:
Działa dobrze dla mnie (tylko bardzo wstępnie przetestowane).
źródło
Zwykle robię to podczas pracy z tablicami asocjacyjnymi:
Działa to również dobrze z tablicami niepowiązanymi. $ key będzie wartością indeksu. Jeśli wolisz, możesz to zrobić:
źródło
Chciałbym to dodać, użyłem tego w laravel, aby po prostu zindeksować moją tabelę:
Mój kod:
źródło
$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:
źródło
źródło