PHP 的 ArrayObject 是不是有 in_array 等价物?
Posted
技术标签:
【中文标题】PHP 的 ArrayObject 是不是有 in_array 等价物?【英文标题】:Does PHP's ArrayObject have an in_array equivalent?PHP 的 ArrayObject 是否有 in_array 等价物? 【发布时间】:2010-11-15 14:07:33 【问题描述】:php 有一个in_array
函数,用于检查本机数组/集合中是否存在特定值。我正在寻找 ArrayObject 的等效函数/方法,但 methods 似乎都没有重复此功能。
我知道我可以将 ArrayObject 转换为(数组)并在 in_array 中使用它。我也知道我可以手动迭代 ArrayObject 并查找值。两者似乎都不是“正确”的做法。
如果你有证据支持,“否”是一个非常合适的答案。
【问题讨论】:
您提供的文档似乎很清楚地表明没有这种方法。学究式地说,我们真的不可能严格证明不存在这样的功能。链接的文档是您将获得的所有证据。 从事 PHP 核心工作的人可能有更多信息。遇到问题并提交错误报告的人可能有更多信息。 PHPs OO 文档通常不能涵盖它所能涵盖的所有内容。我可能错过了一些明显的东西。仅仅因为你不能回答问题并不意味着没有答案。 【参考方案1】:没有。即使忽略文档,您也可以自己查看
echo '<pre>';
print_r( get_class_methods( new ArrayObject() ) );
echo '</pre>';
所以你几乎没有选择。正如您所说,一种选择是投射它
$a = new ArrayObject( array( 1, 2, 3 ) );
if ( in_array( 1, (array)$a ) )
// stuff
这是 IMO 的最佳选择。您可以使用 getArrayCopy() 方法,但这可能比强制转换操作更昂贵,更不用说这种选择的语义有问题了。
如果封装是您的目标,您可以创建自己的 ArrayObject 子类
class Whatever extends ArrayObject
public function has( $value )
return in_array( $value, (array)$this );
$a = new Whatever( array( 1, 2, 3 ) );
if ( $a->has( 1 ) )
// stuff
我根本不推荐迭代,这是 O(n) 并且考虑到替代方案不值得。
【讨论】:
“我根本不推荐迭代,那是 O(n)”in_array
本身就是 O(n),不是吗?以上是关于PHP 的 ArrayObject 是不是有 in_array 等价物?的主要内容,如果未能解决你的问题,请参考以下文章
为啥扩展的 ArrayObject 比原始的 ArrayObject 快?