web-dev-qa-db-fra.com

Comment trouver l'indice foreach

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 existe-t-il un moyen d'obtenir l'index dans la boucle foreach?

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

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

806
Owen

Vous pouvez mettre un hack dans votre foreach, par exemple 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 nécessitant une gestion manuelle (incréments, etc.).

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

par exemple, 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++;
}
152
ConroyP

Il est à noter que vous pouvez appeler key() sur n’importe quel tableau pour trouver la clé en cours sur laquelle elle est activée. Comme vous pouvez le deviner, current() renverra la valeur actuelle et next() déplacera le pointeur du tableau sur l'élément suivant.

24
Bailey Parker

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

foreach(array_keys($array) as $key) {
//  do stuff
}
18
Zoredache

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

15
Ólafur Waage

Ces deux boucles sont équivalentes (barrons bien sûr les garde-corps):

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

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

par exemple

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

foreach ($things as $i=>$thing) {
    echo "Thing ".$i." is ".$thing;
}
8
Trev

Je pense que la meilleure option est la même chose:

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

c'est facile et normalement

6
Mikel Williams

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

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

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

5
Bowser

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

$var = array(2,5);

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

votre sortie sera

2
5

auquel cas chaque élément du tableau a un index connaissable, mais si vous faites ensuite 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 car les tableaux de PHP ne sont pas des structures linéaires comme dans la plupart des langues. Elles ressemblent davantage à des tables de hachage qui peuvent ou non avoir des clés pour toutes les valeurs stockées. Par conséquent, foreach n'utilise pas d'index pour les explorer, car ils ne possèdent d'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, puis utilisez une boucle for.

4
The Brawny Man

Je le fais normalement lorsque je travaille avec des tableaux associatifs:

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

Cela fonctionnera également avec les tableaux non associatifs. $ key sera la valeur d'index. Si vous préférez, vous pouvez le faire aussi:

foreach ($array as $indx => $value) {
  //do something
}
2
Randy Greencorn

Je voudrais ajouter ceci, je l'ai utilisé dans laravel pour simplement indexer mon tableau:

  • Avec $ loop-> index
  • Je l'ai aussi préincrémenté avec ++ $ loop pour commencer à 1

Mon code:

@foreach($resultsPerCountry->first()->studies as $result)
  <tr>
    <td>{{ ++$loop->index}}</td>                                    
  </tr>
@endforeach
1
Taranis
foreach(array_keys($array) as $key) {
//  do stuff
}
0
gdmanandamohon