Jak znaleźć indeks foreach

Czy można znaleźć foreach indeks?

W pętli for następująco:

for ($i = 0; $i < 10; ++$i) {
   echo $i . ' ';
}

$i podam Ci indeks.

Czy muszę używać pętli for Czy Jest jakiś sposób, aby uzyskać indeks w pętli foreach?

Author: buræquete, 2008-09-26

12 answers

foreach($array as $key=>$value) {
    // do stuff
}

$key jest indeksem każdego elementu $array

 693
Author: Owen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-15 19:24:45

Możesz umieścić hack w foreach, np. pole inkrementowane przy każdym uruchomieniu, co jest dokładnie tym, co daje pętla for w tablicy indeksowanej numerycznie. Takim polem byłby pseudo-indeks, który wymaga ręcznego zarządzania (przyrosty, itp.).

A foreach da ci indeks w postaci twojej wartości $key, 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++;
}
 134
Author: ConroyP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-14 03:16:36

Należy zauważyć, że można wywołać key() na dowolnej tablicy, aby znaleźć bieżący klucz jest włączony. Jak można się domyślić current() zwróci bieżącą wartość i next() przeniesie wskaźnik tablicy do następnego elementu.

 22
Author: Bailey Parker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-04 11:17:22

Owen ma dobrą odpowiedź. Jeśli chcesz tylko klucz, a pracujesz z tablicą, może to być również przydatne.

foreach(array_keys($array) as $key) {
//  do stuff
}
 14
Author: Zoredache,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-26 21:35:43

Możesz utworzyć $i poza pętlą i wykonać $i++ na dole pętli.

 11
Author: Ólafur Waage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-19 11:20:40

Te dwie pętle są równoważne (bar barierki bezpieczeństwa oczywiście):

for ($i=0; $i<count($things); $i++) { ... }

foreach ($things as $i=>$thing) { ... }

Eg

for ($i=0; $i<count($things); $i++) {
    echo "Thing ".$i." is ".$things[$i];
}

foreach ($things as $i=>$thing) {
    echo "Thing ".$i." is ".$thing;
}
 7
Author: Trev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-14 03:16:53

Tablice PHP mają wewnętrzne wskaźniki, więc spróbuj tak:

foreach($array as $key => $value){
   $index = current($array);
}

Działa dobrze dla mnie (tylko bardzo wstępnie przetestowane).

 5
Author: sth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-29 04:35:32

Jonathan ma rację. Tablice PHP działają jak tablice map mapujące Klucze do wartości. w niektórych przypadkach można uzyskać indeks, jeśli tablica jest zdefiniowana, na przykład

$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 znany indeks, ale jeśli zrobisz coś takiego jak poniżej

$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, jak w większości języków. Są bardziej jak tabele hash, które mogą lub może nie mieć kluczy dla wszystkich przechowywanych wartości. Dlatego foreach nie używa indeksów do indeksowania, ponieważ mają indeks tylko wtedy, gdy tablica jest zdefiniowana. Jeśli potrzebujesz indeksu, upewnij się, że tablice są w pełni zdefiniowane przed ich przejechaniem i użyj pętli for.

 4
Author: The Brawny Man,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-26 18:47:18

Myślę, że najlepsza opcja jest taka sama:

foreach ($lists as $key=>$value) {
    echo $key+1;
}

To jest proste i normalnie

 2
Author: Mikel Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-14 03:17:21

Zwykle robię to podczas pracy z tablicami asocjacyjnymi:

foreach ($assoc_array as $key => $value) {
 //do something
}

To będzie działać również z tablicami nie asocjacyjnymi. $key będzie wartością indeksu. Jeśli wolisz, możesz też to zrobić:

foreach ($array as $indx => $value) {
  //do something
}
 1
Author: Randy Greencorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-14 03:17:07
foreach(array_keys($array) as $key) {
//  do stuff
}
 0
Author: gdmanandamohon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-16 10:12:58
foreach($arrvariable as $key=>$value){
echo "$key";
}
 -4
Author: Senthil Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-20 13:22:42