Filter ArrayObject (PHP)



我有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;
}

最新更新