将userdata传递给array_walk并引用self

时间:2013-09-17 13:00:55

标签: php arrays multidimensional-array

我必须按搜索关键字过滤多维数组。

我正在使用array_walk,但我无法将搜索到的关键字发送到array_walk中的class

多维数组

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

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

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

)

我尝试了以下功能:

第一个

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

这给了我Fatal error: Using $this when not in object context in

第二个

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

我无法从$search

获取array_walk function var

第三个

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

$search已成功通过use关键字,但$lists数组未更改,因此未引用。为什么呢?

我应该做什么或使用其他功能而不是array_walk

解决方案

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

我发送带有use关键字的params作为数组并引用self。

1 个答案:

答案 0 :(得分:6)

您需要使用use关键字。

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

PHP与JavaScript不同,因此匿名函数仍然在不同的范围内,但这就是use的用途。我会链接到use上的文档,但似乎没有。