ArrayObject 上的 array_slice(或其他 array_* 函数)

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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() 方法中访问数据而不复制数据?

以上是关于ArrayObject 上的 array_slice(或其他 array_* 函数)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 <numpy/arrayobject.h> 在 c++ 中将数据从 np.array 获取到 std::vector?

为啥扩展的 ArrayObject 比原始的 ArrayObject 快?

编译 swig 输出时未找到 arrayobject.h

如何从php中的arrayObject中删除对象?

Cython:致命错误:使用 numpy 找不到“numpy/arrayobject.h”文件

php 标准库之ArrayObject