我有一个名为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;
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。