PHP具有in_array函数,用于检查 native 数组/集合中是否存在特定值。我正在寻找ArrayObject的等效函数/方法,但是methods似乎都没有重复此功能。

我知道我可以将ArrayObject转换为(数组)并在in_array中使用它。我也知道我可以手动遍历ArrayObject并寻找值。似乎都不是执行此操作的“正确”方法。

如果可以有证据支持,则“否”是一个非常合适的答案。

最佳答案

不。即使忽略文档,您也可以自己查看

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),但考虑到其他选择也不值得。

10-06 09:12