42 votes

Array_map fonction dans php avec paramètre

J'ai ce

$ids = array_map(array($this, 'myarraymap'), $data['student_teacher']);

function myarraymap($item) {
    return $item['user_id'];
}

Je voudrais mettre un autre paramètre à ma fonction pour obtenir quelque chose comme

function myarraymap($item,$item2) {
    return $item['$item2'];
}

Quelqu'un peut m'aider ? J'ai essayé beaucoup de choses mais rien ne marche

56voto

Serge S. Points 1890

Vous pouvez utiliser une fonction anonyme et transmettre la valeur de la variable locale dans votre deuxième argument myarraymap de cette façon :

function myarraymap($item,$item2) {
    return $item[$item2];
}

$param = 'some_value';

$ids = array_map(
    function($item) use ($param) { return myarraymap($item, $param); },
    $data['student_teacher']
);

Normalement, il peut être suffisant de simplement passer une valeur à l'intérieur du corps de la fonction anonyme :

function($item) { return myarraymap($item, 'some_value'); }

9voto

anubhava Points 172509

Pensez à utiliser array_walk. Il vous permet de passer user_data.

5voto

Mathieu Dumoulin Points 7125

En dehors de la création d'un objet mappeur, vous ne pouvez pas faire grand-chose. Par exemple :

class customMapper {
    private $customMap = NULL;
    public function __construct($customMap){
        $this->customMap = $customMap;
    }
    public function map($data){
        return $data[$this->customMap];
    }
}

Et puis à l'intérieur de votre fonction, au lieu de créer votre propre mappeur, utilisez la nouvelle classe :

$ids = array_map(array(new customMapper('param2'), 'map'), $data['student_teacher']);

Cela vous permettra de créer un mappeur personnalisé qui peut renvoyer n'importe quel type d'informations... Et vous pouvez complexifier votre customMapper pour accepter plus de champs ou de configuration facilement.

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