Dernière mise à jour: lun 1 mar 2010

array_map_recursive()

(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().

Source

<?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;
}

?>

Syntaxe

array array_map_recursive ( callback $callback , array $arr1 [, array $... ] )

Arguments

  1. callback - La fonction de rappel à exécuter pour chaque élément de chaque tableau, récursivement.
  2. arr1 - Un tableau à exécuter via la fonction de callback.
  3. array - Liste des tableaux à exécuter via la fonction de callback.

Valeurs de retour

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.

Exemples

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
        )

)

Voir aussi

  • array_map() - Applique une fonction sur les éléments d'un tableau.
  • Informations sur le type callback

Commentaire(s)

Il n'y a aucun commentaire pour cette page.

Poster un commentaire