[RESOLU] Boucle foreach et "optimisation"

Petit nouveau ! | 9 Messages

22 févr. 2014, 14:01

Bonjour,

Pouvez-vous me dire si quand on écrit par exemple :

Code : Tout sélectionner

$a = array('id1' => 'One', 'id2' => 'Two', 'id3' => 'Three'); foreach (array_keys($a) as $b) { echo $b; }
le array_keys() est interprété à chaque itération ? Et donc si il faut éviter d'écrire comme ça mais y préférer plutôt :

Code : Tout sélectionner

$a = array('id1' => 'One', 'id2' => 'Two', 'id3' => 'Three'); $keys = array_keys($a); foreach ($keys as $b) { echo $b; }
Comme avec la situation du count() dans une boucle for() en somme... À première vue je dirais non sinon la boucle ne pourrait pas être parcourue mais qui sait :?

Merci !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 févr. 2014, 14:57

salut,

pour répondre à ta question je te dirais que la doc de foreach dit clairement que cette fonction travail sur un tableau et "son pointeur" interne.

donc avec ton premier exemple php utilise array_key puis fait travailler le foreach sur le résultat.

Par contre coté lisibilité la seconde forme est mieux ;)

Dans la doc il y a un exemple avec array.

Le problème d'utiliser count dans la condition d'arrêt d'une boucle for c'est que la boucle for évalue la condition d'arrêt à chaque itération.
ce n'est pas le cas du foreach (la condition d'arrêt c'est le dernier élément du tableau et ça c'est traiter en interne).

Il n'y a que les clef qui t'intéresse ?

si ce n'est pas le cas utilise la récupération des clefs dans la syntaxe du foreach
<?php
$tab = ['id1'=>1,'id2'=>2]; // etc etc
foreach($tab as $index => $valeur) {
//
}
@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 9 Messages

22 févr. 2014, 15:21

Ah super, merci pour ta réponse. Non il n'y a pas que les clefs qui m'intéressent, c'était juste pour l'exemple !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 févr. 2014, 17:15

de rien ;)

si la réponse te va peux tu cliquer sur le bouton résolus à coté du titre stp;

merci


@+
Il en faut peu pour être heureux ......