質問

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

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

"いいえ"証拠でバックアップできる場合は、完全に適切な答えです。

役に立ちましたか?

解決

いいえ。ドキュメントを無視しても、自分で見ることができます

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)であり、代替案を考えるとそれだけの価値はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top