walk - php traverse multidimensional array



Passare userdata a array_walk e fare riferimento a self (1)

Devo filtrare array multidimensionale per parola chiave ricercata.

Sto usando array_walk ma non array_walk inviare la parola chiave ricercata all'interno di array_walk in class

array multidimensionale

Array
(
    [0] => SimpleXMLElement Object
        (
            [plugin_name] => Custom Extension
        )

    [1] => SimpleXMLElement Object
        (
            [plugin_name] => Hello World
        )

    [2] => SimpleXMLElement Object
        (
            [plugin_name] => Test Plugin
        )

)

Ho provato a seguire le seguenti funzioni:

Il primo

array_walk($lists, function(&$value, $index){
    if (stripos($value->plugin_name, $this->search) === false)
        unset($lists[$index]);
});

Questo mi dà Fatal error: Using $this when not in object context in

Il secondo

$search = $this->search;
array_walk($lists, function(&$value, $index){
    if (stripos($value->plugin_name, $search) === false)
        unset($lists[$index]);
});

Non sono riuscito a ottenere $search var dalla array_walk function

Il terzo

$search = $this->search;
array_walk($lists, function (&$value, $index) use ($search) {
if (stripos($value->plugin_name, $search) !== false)
    return $value;
});

$search passata con successo con la parola chiave use ma $lists array non ha cambiato quindi non referenziato. Perché?

Cosa dovrei fare o usare un'altra funzione invece di array_walk ?

Soluzione

$params = array('search' => $this->search, 'data' => $lists);

array_walk($lists, function (&$value, $index) use (&$params) {
if (stripos($value->plugin_name, $params['search']) === false)
  unset($params['data'][$index]);
});

$lists = $params['data'];

Ho inviato parametri con la parola chiave use come array e il riferimento a self.


Devi usare la parola chiave use .

array_walk($lists, function (&$value, $index) use ($search) {

PHP non è come JavaScript, quindi la funzione anonima è ancora in un ambito diverso, ma è a questo che use . Vorrei collegare alla documentazione use , ma non sembra esserci alcun.





multidimensional-array