Comment trouver l'index de chaque

est-il possible de trouver l'index foreach ?

dans une boucle for comme suit:

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

$i vous donnera l'index.

dois-je utiliser la boucle for ou y a-t-il un moyen d'obtenir l'index de la boucle foreach ?

363
demandé sur buræquete 2008-09-26 22:23:15
la source

12 ответов

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

$key est l'indice de chaque $array élément

693
répondu Owen 2014-05-15 23:24:45
la source

vous pouvez mettre un hack dans votre foreach , tel qu'un champ incrémenté à chaque passage, ce qui est exactement ce que la boucle for vous donne dans un tableau indexé numériquement. Un tel champ serait un pseudo-index qui nécessite une gestion manuelle (incréments, etc.).

A foreach vous donnera votre index sous la forme de votre valeur $key , donc un tel piratage ne devrait pas être nécessaire.

p.ex., dans un 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
répondu ConroyP 2017-12-14 06:16:36
la source

il est à noter que vous pouvez appeler key() sur n'importe quel tableau pour trouver la touche courante son on. Comme vous pouvez deviner current() retournera la valeur courante et next() déplacera le pointeur du tableau à l'élément suivant.

22
répondu Bailey Parker 2011-03-04 14:17:22
la source

Owen a une bonne réponse. Si vous voulez juste la clé, et que vous travaillez avec un tableau cela peut également être utile.

foreach(array_keys($array) as $key) {
//  do stuff
}
14
répondu Zoredache 2008-09-27 01:35:43
la source

vous pouvez créer $i en dehors de la boucle et faire $i++ au bas de la boucle.

11
répondu Ólafur Waage 2015-08-19 14:20:40
la source

ces deux boucles sont équivalentes (à l'exception des garde-corps de sécurité bien sûr):

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
répondu Trev 2017-12-14 06:16:53
la source

les tableaux PHP ont des pointeurs internes, alors essayez ceci:

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

Fonctionne bien pour moi (très préalablement testé).

5
répondu sth 2010-12-29 07:35:32
la source

Jonathan a raison. Les tableaux PHP agissent comme une table de correspondance des clés de valeurs. dans certains cas, vous pouvez obtenir un indice si votre tableau est défini comme

$var = array(2,5);

for ($i = 0; $i < count($var); $i++) {
    echo $var[$i]."\n";
}

votre sortie sera

2
5

dans ce cas, chaque élément du tableau a un index reconnaissable, mais si vous faites alors quelque chose comme ce qui suit

$var = array_push($var,10);

for ($i = 0; $i < count($var); $i++) {
    echo $var[$i]."\n";
}

vous n'obtenez aucune sortie. Cela se produit parce que les tableaux en PHP ne sont pas des structures linéaires comme ils sont dans la plupart des langues. Ils sont plus comme des tables de hachage qui peuvent ou ne peuvent pas avoir des clés pour toutes les valeurs stockées. Foreach n'utilise donc pas les index pour les parcourir car ils n'ont un index que si le tableau est défini. Si vous avez besoin d'un index, assurez-vous que vos tableaux sont entièrement définis avant de les parcourir en rampant, et utilisez un pour boucle.

4
répondu The Brawny Man 2008-09-26 22:47:18
la source

je pense que la meilleure option est la même:

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

, c'est facile et normalement

2
répondu Mikel Williams 2017-12-14 06:17:21
la source

je le fais normalement quand je travaille avec des tableaux associatifs:

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

cela fonctionnera très bien avec les tableaux non-associatifs aussi. $key sera la valeur de l'indice. Si vous préférez, vous pouvez le faire aussi:

foreach ($array as $indx => $value) {
  //do something
}
1
répondu Randy Greencorn 2017-12-14 06:17:07
la source
foreach(array_keys($array) as $key) {
//  do stuff
}
0
répondu gdmanandamohon 2016-06-16 13:12:58
la source
foreach($arrvariable as $key=>$value){
echo "$key";
}
-4
répondu Senthil Kumar 2016-09-20 16:22:42
la source

Autres questions sur php loops foreach