微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 有关数组接口集合的array_map?

我有一个名为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 举报,一经查实,本站将立刻删除。

相关推荐