【问题标题】: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 文档通常不能涵盖它所能涵盖的所有内容。我可能错过了一些明显的东西。仅仅因为不能回答问题并不意味着没有答案。

标签: php arrays oop arrayobject


【解决方案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),不是吗?
猜你喜欢
  • 2019-03-11
  • 2010-09-24
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 2013-04-19
  • 1970-01-01
  • 2021-03-29
  • 2011-01-16
相关资源
最近更新 更多