我有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
功能?
如何将其导出到实际数组,然后创建一个新的数组对象?
$my_data = new ArrayObject(array(1,2,3));
$result = new ArrayObject(
array_filter( (array) $my_data, function($item) {
return $item !== 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;
}
这个怎么样:
$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;
}