554 votes

Comment trouver l'index foreach ?

Est-il possible de trouver le foreach indice ?

dans un for boucle comme suit :

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

$i vous donnera l'index.

Dois-je utiliser le for ou existe-t-il un moyen d'obtenir l'index dans le fichier foreach boucle ?

1038voto

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

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

2 votes

Cela dépend de ce que le PO entend par "indice" : < ? $a = array(3,5, 'xx',4312, 'sasas') ; unset($a[3]) ; foreach ($a as $k=>$v) print "\$k= $k and \$v = $v" ; ?>

9 votes

Décidément, cette question n'est pas très spécifique, j'ai cru comprendre que le PO ignorait largement la syntaxe $key=>$value

48 votes

En fait, c'est juste, mais ce ne devrait pas être la réponse acceptée, puisque la clé peut aussi être une chaîne. disons que vous faites $myarr['foo'] = 'bar'; cette méthode échoue

186voto

ConroyP Points 24021

Vous pouvez mettre un hack dans votre foreach comme un champ qui s'incrémente à chaque passage, ce qui est exactement ce que fait le programme 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 indice sous la forme de votre $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++;
}

136 votes

Avoir une valeur incrémentée dans une boucle n'est pas un "hack".

22 votes

Thomas McCabe On pourrait même dire que c'est l'une des principales utilisations d'une boucle.

29voto

PhpMyCoder Points 6719

Il convient de noter que vous pouvez appeler key() sur n'importe quel tableau pour trouver la clé courante sur laquelle il se trouve. Comme vous pouvez le deviner current() retournera la valeur actuelle et next() déplacera le pointeur du tableau vers l'élément suivant.

0 votes

Cela devrait être utile si vous voulez utiliser un bon vieux tableau associatif PHP pour stocker des données qui doivent être exposées via l'interface Iterable (où vous avez besoin de savoir où vous êtes dans une boucle).

3 votes

+1 pour l'alternative, mais un appel de fonction à chaque itération est un peu plus lourd que l'utilisation de variables pré-assignées (c'est-à-dire l'utilisation de la fonction $key de $key=>$value )... Cependant, je parie que la baisse de performance est non significative/perceptible dans une simple boucle.

23voto

Zoredache Points 8873

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

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

4 votes

Et si vous avez besoin de l'index, foreach(array_keys($array) as $index=>$key) .

18voto

Ólafur Waage Points 40104

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

20 votes

Il est important de noter que cette approche donne l'itération actuelle de la boucle, PAS l'index actuel du tableau itéré.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X