PHP的ArrayObject是否具有in_array等价物?

Ala*_*orm 6 php arrays oop arrayobject

PHP具有in_array检查本机数组/集合中是否存在特定值的函数.我正在寻找ArrayObject的等效函数/方法,但没有一个方法似乎复制此功能.

我知道我可以将ArrayObject转换为(数组)并在in_array中使用它.我也知道我可以手动迭代ArrayObject并查找值.这似乎都不是"正确"的方式.

如果你能用证据支持,"不"是一个非常恰当的答案.

Pet*_*ley 8

不.甚至无视文档,您可以自己查看

echo '<pre>';
print_r( get_class_methods( new ArrayObject() ) );
echo '</pre>';
Run Code Online (Sandbox Code Playgroud)

所以你没有多少选择.正如你所说,一种选择就是施展它

$a = new ArrayObject( array( 1, 2, 3 ) );
if ( in_array( 1, (array)$a ) )
{
  // stuff
}
Run Code Online (Sandbox Code Playgroud)

这是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
}
Run Code Online (Sandbox Code Playgroud)

我根本不建议迭代,那是O(n)并且考虑到替代方案,它们是不值得的.