N'PHP Ont un “built-in” itérateur dans une boucle Foreach?
Je suis à l'aide d'une boucle foreach pour parcourir la DEMANDE tableau, que je veux avoir un moyen facile d'utiliser la DEMANDE de la matrice de clés et de valeurs.
Cependant, je veux aussi avoir un indice numérique de combien de fois la boucle est exécutée, comme je suis en train d'écrire une feuille de calcul avec PHPExcel, et je veux utiliser le SetCellValue
fonction. Je suis en train de penser à quelque chose comme ceci:
foreach( $_REQUEST as $key => $value){
$prettyKeys = ucwords(preg_replace($patt_underscore," ",preg_replace($patt_CC,"_",$key)));
$prettyVals = ucwords(preg_replace($patt_underscore," ",preg_replace($patt_CC,"_",$value)));
//Replace CamelCase with Underscores, then replace the underscores with spaces and then capitalize string
//"example_badUsageOfWhatever" ==> "Example Bad Usage Of Whatever"
$myExcelSheet->getActiveSheet()->SetCellValue( "A". $built-in-foreach-loop-numerical-index ,$prettyKeys);
$myExcelSheet->getActiveSheet()->SetCellValue( "B". $built-in-foreach-loop-numerical-index ,$prettyVals);
}
Je sais que je peux facilement mettre en place quelque chose comme $c = 0
outsite le foreach et puis il suffit de l'incrémenter à chaque fois que la boucle est exécutée, mais est-il quelque chose de plus propre?
- En un mot, aucun. Comme dans à peu près n'importe quelle langue, si vous voulez un compteur que vous avez à mettre en œuvre vous-même.
- Utilisation
for
boucle si vous avez besoin de cette fonctionnalité.
Vous devez vous connecter pour publier un commentaire.
PHP foreach ne dispose pas de cette fonctionnalité intégrée (par le manuel). Utiliser un pour la boucle avoir un itérateur ou de mettre en œuvre vous-même.
La
for
boucle de vous donner un compteur automatique, mais pas moyen de passer à travers votre$_REQUEST
tableau associatif. Leforeach
boucle vous permettra de faire défiler, mais sans un compteur intégré. C'est un compromis, mais au moins c'est un très gérable (ne prend que 2 lignes de code pour créer le compteur)!Utiliser le SPL Classe Iterator. Je suis sûr qu'il ya quelque chose là-bas que vous pouvez utiliser pour cela.
Non, il n'est pas intégré dans le itérateur indice numérique. Vous pouvez résoudre ce problème dans d'autres façons, même si.
Le moyen le plus évident pour ce faire est d'utiliser un simple
for
boucle:Vous pouvez également utiliser
foreach
avec une variable de compteur:À l'aide d'une Boucle For
Vous avez certainement peut le faire avec une boucle for, c'est juste un peu moche:
Étendre ArrayIterator
Ma manière préférée serait d'étendre ArrayIterator. Ajouter un compteur interne, puis remplacer next() et rewind() pour mettre à jour le compteur. Le compteur donne le 0 basée sur la clé de l'actuel de l'élément de tableau:
Une réponse à votre question ici aussi: Comment puis-je savoir combien de fois un foreach construire des boucles en PHP, sans l'aide d'un "compteur" variable?
Peu de temps, non. Il n'y a pas de moyen plus facile.
Vous pouvez obtenir l'index de chaque touche de $_REQUEST tableau:
$req_index= array_flip (array_keys($_REQUEST));
Maintenant, vous avez le numéro d'index de l'élément courant à travers
$req_index[$key]
, qui donne également le nombre d'itérations de la boucle: