7

PHP にはin_array、特定の値がネイティブ配列/コレクションに存在するかどうかをチェックする関数があります。ArrayObject の同等の関数/メソッドを探していますが、この機能を複製するメソッドはありません。

ArrayObject を (配列) としてキャストし、in_array で使用できることはわかっています。また、ArrayObject を手動で反復処理して値を探すことができることもわかっています。どちらもこれを行う「正しい」方法とは思えません。

「いいえ」は、証拠で裏付けることができる場合、完全に適切な答えです.

4

1 に答える 1

9

いいえ。ドキュメントを無視しても、自分の目で確認できます

echo '<pre>';
print_r( get_class_methods( new ArrayObject() ) );
echo '</pre>';

したがって、選択肢はほとんどありません。あなたが言うように、1つのオプションはそれをキャストすることです

$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 に答える