keys example array_walk_recursive array_values array_map array_filter array php arrays multidimensional-array

php - example - Pasar datos de usuario a array_walk y hacer referencia a self



php map array keys (1)

Tengo que filtrar la matriz multidimensional por palabra clave buscada.

Estoy usando array_walk pero no pude enviar palabra clave buscada dentro de array_walk en class

matriz multidimensional

Array ( [0] => SimpleXMLElement Object ( [plugin_name] => Custom Extension ) [1] => SimpleXMLElement Object ( [plugin_name] => Hello World ) [2] => SimpleXMLElement Object ( [plugin_name] => Test Plugin ) )

Intenté seguir las siguientes funciones:

El primero

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

Esto me da un Fatal error: Using $this when not in object context in

Segundo

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

No pude obtener $search var de la array_walk function

El tercero

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

$search pasó satisfactoriamente con use keyword, pero $lists array no cambió por lo que no se hace referencia. ¿Por qué?

¿Qué debería hacer o usar otra función en lugar de array_walk ?

Solución

$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''];

Envié params con la palabra clave use como array y referencia a self.


Debe usar la palabra clave use .

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

PHP no es como JavaScript, por lo que la función anónima se encuentra en un ámbito diferente, pero para eso use . Me gustaría vincular a la documentación sobre el use , pero parece que no hay ninguno.