4

我有我的数据ArrayObject,只是代表一个数组。我需要过滤数据,功能array_filter()会很好用。但是,它不能用作ArrayObject参数。最好的治疗方法是什么?是否有任何标准功能可以为我处理过滤?

例子:

$my_data = ArrayObject(array(1,2,3));
$result = array_object_filter($my_data, function($item) { return $item !== 2; });

有什么array_object_filter功能吗?

4

3 回答 3

5

你将它导出到一个实际的数组,然后创建一个新的数组对象怎么样?

$my_data = new ArrayObject(array(1,2,3));
$result = new ArrayObject( 
    array_filter( (array) $my_data, function($item) { 
         return $item !== 2; 
    })
);
于 2012-06-30T14:36:46.440 回答
2

如何继承 ArrayObject 并向其添加新方法:

/**
 * Filters elements using a callback function.
 *
 * @param callable $callback The callback function to use
 *
 * @return self
 */
public function filter(/* callable */ $callback = null)
{
    $this->exchangeArray(array_filter($this->getArrayCopy(), $callback));
    return $this;
}
于 2017-03-29T07:42:22.470 回答
0

这个怎么样:

$my_data = new ArrayObject(array(1,2,3));
$callback = function($item) { return $item !== 2; };
$result = new ArrayObject;
foreach ($my_data as $k => $item) if ($callback($item)) $result[$k] = $item;

或者,您可以自己定义一个 array_object_filter() 函数:

function array_object_filter($array, $callback) {
    $result = new ArrayObject;
    foreach ($array as $k => $item) if ($callback($item)) $result[$k] = $item;
    return $result;
}
于 2012-06-30T14:30:58.097 回答