60 votes

array_map ne fonctionne pas dans les classes

J'essaie de créer une classe pour gérer les tableaux, mais je n'arrive pas à y faire fonctionner array_map() .

 <?php
//Create the test array
$array = array(1,2,3,4,5,6,7,8,9,10);
//create the test class
class test {
//variable to save array inside class
public $classarray;

//function to call array_map function with the given array
public function adding($data) {
    $this->classarray = array_map($this->dash(), $data);
}

// dash function to add a - to both sides of the number of the input array
public function dash($item) {
    $item2 = '-' . $item . '-';
    return $item2;
}

}
// dumps start array
var_dump($array);
//adds line
echo '<br />';
//creates class object
$test = new test();
//classes function adding
$test->adding($array);
// should output the array with values -1-,-2-,-3-,-4-... 
var_dump($test->classarray);

Cette sortie

array(10) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) [7]=> int(8) [8]=> int(9) [9]=> int(10) }

Warning: Missing argument 1 for test::dash(), called in D:\xampp\htdocs\trainingdvd\arraytesting.php on line 11 and defined in D:\xampp\htdocs\trainingdvd\arraytesting.php on line 15

Warning: array_map() expects parameter 1 to be a valid callback, function '--' not found or invalid function name in D:\xampp\htdocs\trainingdvd\arraytesting.php on line 11 NULL

Qu'est-ce que je fais mal ou cette fonction ne fonctionne tout simplement pas dans les classes ?

161voto

Jon Points 194296

Vous spécifiez dash comme rappel dans le mauvais sens.

Cela ne fonctionne pas:

 $this->classarray = array_map($this->dash(), $data);

Cela fait :

 $this->classarray = array_map(array($this, 'dash'), $data);

Découvrez les différentes formes qu'un rappel peut prendre ici .

46voto

Bonjour, vous pouvez utiliser comme celui-ci

     // Static outside of class context
array_map( array( 'ClassName', 'methodName' ), $array );

// Static inside class context
array_map( array( __CLASS__, 'methodName' ), $array );

// Non-static outside of object context
array_map( array( $object, 'methodName' ), $array );

// Non-static inside of object context
array_map( array( $this, 'methodName' ), $array );

2voto

Anomie Points 43759

array_map($this->dash(), $data) appelle $this->dash() avec 0 arguments et utilise la valeur de retour comme fonction de rappel à appliquer à chaque membre du tableau. Vous voulez plutôt array_map(array($this,'dash'), $data)

2voto

Stefan Gehrig Points 47227

il faut lire

 $this->classarray = array_map(array($this, 'dash'), $data);

Le array -thing est le rappel PHP pour une méthode d'instance d'objet. Les rappels aux fonctions normales sont définis comme de simples chaînes contenant le nom de la fonction ( 'functionName' ), tandis que les appels de méthodes statiques sont définis comme array('ClassName, 'methodName') ou comme une chaîne comme celle-ci : 'ClassName::methodName' (cela fonctionne à partir de PHP 5.2.3).

0voto

Format Points 1

Pour les tableaux multidimensionnels (tous les tableaux) :

     $data = array_map('decode'), $data);

    function decode($data)
    {
        if (is_array($data)) {
            foreach ($data as &$value) {
                if (is_array($value)) {
                    $value = decode($value);
                } else {
                    $value = html_entity_decode($value);
                }
            }
        } else {
            $data = html_entity_decode($data);
        }
        return $data;
    }

Pour les tableaux multidimensionnels (n'importe quel tableau) dans la classe :

 $data = array_map(array($this,'decode'), $data);

private function decode($data)
{
    if (is_array($data)) {
        foreach ($data as &$value) {
            if (is_array($value)) {
                $value = $this->decode($value);
            } else {
                $value = html_entity_decode($value);
            }
        }
    } else {
        $data = html_entity_decode($data);
    }
    return $data;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X