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.