Question

Est-il possible de trouver l'index foreach ?

dans une boucle pour comme suit:

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

$ i vous donnera l'index.

Dois-je utiliser la boucle pour ou existe-t-il un moyen d'obtenir l'index dans la boucle foreach ?

Était-ce utile?

La solution

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

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

.

Autres conseils

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 une tableau indexé. 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 , un tel piratage ne devrait donc 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++;
}

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

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
}

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

Ces deux boucles sont équivalentes (sauf les balustrades de sécurité bien sûr):

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;
}

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

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

Fonctionne bien pour moi (cependant, les premiers tests ont été faits).

Jonathan a raison. Les tableaux PHP agissent comme une table de mappage menant des clés aux 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 parce que les tableaux en 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.

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

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

c'est facile et normalement

Je fais normalement cela 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 aussi le faire:

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

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

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

Mon code:

@foreach($resultsPerCountry->first()->studies as $result)
  <tr>
    <td>{{ ++$loop->index}}</td>                                    
  </tr>
@endforeach
foreach(array_keys($array) as $key) {
//  do stuff
}
foreach($arrvariable as $key=>$value){
echo "$key";
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top