Modifier une collection à chaud en PHP

Modifier une collection à chaud en PHP

Dans les boucles foreach, il est parfois utiles de vouloir modifier à chaud les variables contenues dans un tableau. Je suis tombé récemment sur un bug (dans une extension Wordpress dont je ne citerais pas le nom) du à une mauvaise utilisation de la boucle foreach. Pourtant, il existe des solutions simples pour faire cette manipulation.

Le bug

$list = array('aaa', 'bbb', 'ccc'); 
foreach ($list as $elt) { 
    $elt = strtoupper($elt); 
} 
var_export($list); 
array ( 
    0 => 'aaa', 
    1 => 'bbb', 
    2 => 'ccc', 
) 
Le résultat n'est pas celui attendu, aucune modification n'a été appliqué pour la simple et bonne raison que cette manière de faire implique l'utilisation d'une copie de la liste.

Utilisations des références

On a marqué l’élément comme étant une référence à l’aide du symbole ‘&‘.

foreach ($list as &$elt) { 
    $elt = strtoupper($elt); 
} 
unset($elt); 

Par contre, il faut penser à supprimer la référence après la boucle. Car, la variable est une référence sur le dernier élément du tableau. On peut donc la modifier accidentellement par la suite si on ne pense pas à la déréférencer.

Modifier l'élément dans la liste

Une autre solution consiste à récupéré chaque élément de la collection pour le réaffecter une nouvelle valeur.

foreach ($list as $key => $elt) { 
    $list[$key] = strtoupper($elt); 
} 

Solution issus de la programmation fonctionnelle

Une autre solution consiste à passé par la fonction qui applique une fonction ou une méthode sur chaque élément de la liste, il suffit de renseigner le callback dans l’appel de la méthode.

$list = array('aaa', 'bbb', 'ccc'); 
$list = array_map(strtoupper, $list); 

PHP 5.3 autorise les closures comme paramètre à la fonction. Pour des fonctions personnalisées, on peut désormais écrire.

$list = array_map(function($e) { ... }, $list); 
comments powered by Disqus

Voir aussi

Problème de reverse proxy dans l'admin de SPIP

Problème de reverse proxy dans l'admin de SPIP

Si vous utilisez un reverse proxy, l’admnistration de SPIP se basera sur l’adresse présente dans la variable SERVER_NAME du tableaux super …

Plugin Wordpress de correction des erreurs de grammaires

Plugin Wordpress de correction des erreurs de grammaires

Bien que de nombreux navigateurs disposent par défaut de correcteur orthographique, les erreurs de grammaires passent entre les mailles du filet. Le …

Supprimer $this dans les scripts de Zend_View

Supprimer $this dans les scripts de Zend_View

Avec le composant de vue Zend_View, il faut sans arret préfixé les variables par le pointeur $this. Pourtant, il existe une solution pour accéder …

Layout 3 colonnes en XHTML / CSS

Layout 3 colonnes en XHTML / CSS

Comment faire un layout en 3 colonnes avec XHTML / CSS ? Voila une des question qui m’a souvent été posé lors d’entretien …

A la une
  • Rencontre du numérique 2019 - Nîmes
  • référencement naturel d'un hôtel
  • Développeur eZ Platform
  • Tech lead Symfony
  • Expert Qualité Web

Copyright - Sylvain FIX

2009 - 2019