7

PHP 有一个in_array函数用于检查本地数组/集合中是否存在特定值。我正在寻找 ArrayObject 的等效函数/方法,但似乎没有任何方法可以复制此功能。

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

如果你能用证据支持它,“不”是一个非常合适的答案。

4

1 回答 1

9

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

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) 并且考虑到替代方案是不值得的。

于 2009-07-30T20:14:45.223 回答