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
?
foreach($array as $key=>$value) {
// do stuff
}
$key
est l'index de chaque $array
élément
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++;
}
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.
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 (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;
}
Je pense que la meilleure option est la même chose:
foreach ($lists as $key=>$value) {
echo $key+1;
}
c'est facile et normalement
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).
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.
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
}
Je voudrais ajouter ceci, je l'ai utilisé dans laravel pour simplement indexer mon tableau:
Mon code:
@foreach($resultsPerCountry->first()->studies as $result)
<tr>
<td>{{ ++$loop->index}}</td>
</tr>
@endforeach
foreach(array_keys($array) as $key) {
// do stuff
}