Articles

Le mois de la fonction PHP : des boucles sans for

  • Ecrit par Damien Seguy
  • dimanche 29 avril 2007
Image pour le titre du contenu

This document is also available in English en 



Appliquer un filtre à une variable est simple. Appliquer le même filtre sur plusieurs variables demande une boucle. Ou bien une fonction de tableau.


array_filter est notre premier arrêt. Array_filter filtre un tableau en appliquant à tous ses éléments une fonction. La fonction doit retourner true pour que l'élément soit conservé.

<?php
 
 
$array = array_flip(range('a', 'f'));
 
 
$filtered = array_filter( $array,'filter');
print_r($filtered);
 
 
 
function filter($x) {
    return $x % 2;
}
?>
 
 
Array
(
    [b] => 1
    [d] => 3
    [f] => 5
)

Outre la sélection, il est possible de modifier tous les éléments d'un tableau en leur appliquant directement une fonction à tous les éléments, et en les modifiants  dans le tableau. La fonction de transformation prend un ou plusieurs argument, et retourne une valeur qui sera stockée dans le tableau résultant.

<?php
$array = array_flip(range('a', 'f'));
 
 
$transformed = array_map('transforme', $array);
print_r($transformed);
 
 
function transforme($x) {
    if ($x < 2) {
        return $x. " pain";
    } else {
        return $x. " pains";
    }
}
?>

Pour transformer un tableau associatif, il faut faire une pirouette :
<?php
$array = array_flip(range('a', 'f'));
 
 
$keys = array_keys($array);
$values = array_values($array);
 
 
$middle = array_map('transforme', $keys, $values);
$transformed = array_combine($keys, $middle);
print_r($transformed);
 
 
function transforme($key, $value) {
    return "La cl&eacute; $key est associ&eacute;e a la valeur $value";
}
?>

La fonction de transformation peut accepter plusieurs arguments : il faut alors fournir à array_map() le même nombre de tableaux que d'arguments à la fonction. Si vous en passez trop, les tableaux surnuméraires seront envoyés, et vous devrez y accéder via les fonctions comme func_get_args(). Si vous n'en passez pas assez, une alerte sera affichée pour chaque appel à la fonction de filtre.

array_walk() fonctionne de la même façon que array_map(), à quelques aspects prêts. Là où array_map() retourne un tableau, array_walk() travaille directement sur le serveur.

Les arguments sont inversés, et la fonction passe en deuxième, et le tableau en premier. Array_walk() est aussi capable de prendre des arguments fixes, ce que array_map() ne peut pas faire, sans passer par la création d'un tableau d'arguments identiques à l'aide d'array_fill().

Par ailleurs, la clé est automatiquement fournie comme deuxième argument. Tous les autres arguments Voici l'exemple précédent, réécrit avec array_walk().

<?php
$array = array_flip(range('a', 'f'));
 
 
array_walk($array, 'transforme');
print_r($array);
 
 
function transforme(&amp;$value, $key) {
    $value = "La cl&eacute; $key est associ&eacute;e a la valeur $value";
}
?>

A mémoriser
  • Il est possible de donner simplement le tableau à array_filter(), et dans ce cas, toutes les valeurs qui sont équivalentes à false seront supprimées.
  • La fonction de transformation de array_map() sera appliqué au plus grand nombre d'éléments possible. Généralement, les tableaux donnés sont tous de même taille.
  • array_walk() is capable to work with multi-dimensionnal array, with array_walk_recursive()
< Précédent   Suivant >

Commentaires

Vous pouvez ajouter votre commentaire!


Vous devez vous connecter pour commenter