【问题标题】:array_slice (or other array_* functions) on ArrayObjectArrayObject 上的 array_slice(或其他 array_* 函数)
【发布时间】:2011-10-01 10:04:24
【问题描述】:

我有一个关于 ArrayObject 的问题。我想在 ArrayObject 类中使用 array_slice,但我不能。有没有办法做到这一点,而不需要向实现 ArrayObject 的类编写“切片”方法?

【问题讨论】:

    标签: php arrays implementation arrayobject slice


    【解决方案1】:

    您可以随时处理数组副本:

    $array = $object->getArrayCopy();
    // modify $array as needed, e.g. array_slice(....) 
    $object = new ArrayObject($array);
    

    在过去的某个时候,有一个想法是让所有接受数组(或者可能是其中的许多)的函数也接受 ArrayObject。但我不知道这已经走了多远,如果它仍然被遵循。我认为 ArrayObject 比实际替换 PHP 中的原生数组更像是一种行为。

    相关问题:PHP Array and ArrayObject

    【讨论】:

    • 这很容易实现,但是对内存不好。如果这很重要,那么实现自己的类 ArrayObject 类是值得的,您可以在其中访问私有数组数据,以便直接操作它。
    • 我必须承认我对 ArrayObject 的内部结构一无所知。
    • 由于数组的大小(+400k 项),我希望避免使用 getArrayCopy()。
    • 只是好奇,有什么原因阻止您直接使用标准数组吗?和/或在您的情况下扩展 ArrayObject 是一种选择吗?
    • 它是来自数据库的结果,原始类是一个带有一些额外实现(主要是迭代器)的 ArrayObject。扩展这个类是一件很麻烦的事情
    【解决方案2】:

    拥有一个包装 php 数组函数的类并不是一个坏主意。会让代码更干净。

    echo $myAry->slice(10, 5)->reverse()->join(", ");
    

    就像普通语言一样,你知道的。

    【讨论】:

    • 这看起来真的很酷@hakre。 @stereofrog,如何在 slice() 方法中访问数据而不复制数据?
    猜你喜欢
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    相关资源
    最近更新 更多