我有一个名为Collection的类,它存储相同类型的对象.
Collection实现了数组接口:Iterator,ArrayAccess,SeekableIterator和Countable.
我想将一个Collection对象作为数组参数传递给array_map函数.但这失败了,错误
PHP Warning: array_map(): Argument #2 should be an array
我可以通过实现其他/更多接口来实现这一点,以便将Collection对象视为数组吗?
解决方法:
array_map()函数不支持Traversable作为其数组参数,因此您必须执行转换步骤:
array_map($fn, iterator_to_array($myCollection));
除了迭代集合两次之外,它还会产生一个之后不会使用的数组.
另一种方法是编写自己的地图功能:
function map(callable $fn)
{
$result = array();
foreach ($this as $item) {
$result[] = $fn($item);
}
return $result;
}
更新
根据您的用例判断,您似乎对地图操作的结果不感兴趣;因此使用iterator_apply()更有意义.
iterator_apply($myCollection, function($obj) {
$obj->method1();
$obj->method2();
return true;
});
标签:array-map,php,arrays,iterator
来源: https://codeday.me/bug/20191007/1866247.html