(PHP 4 >= 4.2.0, PHP 5)
Applique une fonction sur les éléments d'un tableau, récursivement.
array_map_recursive() retourne un tableau contenant tous les éléments du tableau arr1, après leur avoir appliqué la fonction callback, récursivement. Le nombre de paramètres de la fonction callback doit être égal au nombre de tableaux passés dans la fonction array_map_recursive().
<?php function array_map_recursive() { $args = func_get_args(); $callback = array_shift($args); $fn = __FUNCTION__; $out = array(); $max = count(max($args)); for($i=0; $i<$max; $i++) { if(count($args)==1) { foreach($args[0] as $key=>$value) { if(is_array($value)) $out[$key] = $fn($callback, $value); else $out[$key] = call_user_func($callback, $value); } } else { $is_array = false; $callbacks_args = array(); foreach($args as $array) { $values = array_values($array); if(isset($values[$i])) $value = $values[$i]; else $value = ''; if(is_array($value)) { $is_array = true; $callbacks_args[] = $value; } else { $callbacks_args[] = $value; } } if($is_array) { $m = count(max($callbacks_args)); $new_callback_args = array($callback); foreach($callbacks_args as $arg) { if(!is_array($arg)) $new_callback_args[] = array_fill(0, $m, $arg); else $new_callback_args[] = $arg; } $out[] = call_user_func_array($fn, $new_callback_args); } else { $out[] = call_user_func_array($callback, $callbacks_args); } } } return $out; } ?>
array array_map_recursive ( callback $callback , array $arr1 [, array $... ] )
Retourne un tableau contenant tous les éléments du tableau arr1 après avoir appliqué la fonction de callback sur chacun d'eux, récursivement.
Exemple #1 Exemple avec array_map_recursive()
<?php function cube($n) { return($n * $n * $n); } $a = array(1, 2, 3, array(4, 5, 6)); $b = array_map_recursive("cube", $a); print_r($b); ?>
Le contenu de la variable $b sera :
Array ( [0] => 1 [1] => 8 [2] => 27 [3] => Array ( [0] => 64 [1] => 125 [2] => 216 ) )
Exemple #2 array_map_recursive() : utilisation d'une fonction quelconque (depuis PHP 5.3.0)
<?php $func = function($value) { return $value * 2; }; $a = array(1, 2, 3, array(4, 5, 6)); print_r(array_map_recursive($func, $a)); ?>
L'exemple ci-dessus va afficher :
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => Array ( [0] => 8 [1] => 10 [2] => 12 ) )
Exemple #3 array_map_recursive() : utilisation de plusieurs tableaux
<?php function show_Spanish($n, $m) { return("Le nombre $n se dit $m en Espagnol"); } $a = array(array(1, "un"), array(2, "deux"), array(3, "trois")); $b = array("uno", "dos", "tres"); $c = array_map_recursive("show_Spanish", $a, $b); print_r($c); ?>
L'exemple ci-dessus va afficher :
Array ( [0] => Array ( [0] => Le nombre 1 se dit uno en Espagnol [1] => Le nombre un se dit uno en Espagnol ) [1] => Array ( [0] => Le nombre 2 se dit dos en Espagnol [1] => Le nombre deux se dit dos en Espagnol ) [2] => Array ( [0] => Le nombre 3 se dit tres en Espagnol [1] => Le nombre trois se dit tres en Espagnol ) )
Commentaire(s)
Poster un commentaire