2009-07-30 18 views
5

PHPには、固有の配列/コレクションに特定の値が存在するかどうかをチェックするためのin_array関数があります。 ArrayObjectの同等の関数/メソッドを探していますが、methodsのどれもこの機能を複製していないようです。PHPのArrayObjectにはin_arrayと同等のものがありますか?

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

「いいえ」は、証拠をバックアップすることができれば完全に適切な回答です。

+0

あなたが提供したドキュメントは、そのような方法がないことをかなり明白に示しているようです。 Pedantically、そのような機能が存在しないことを厳密に証明することは実際には不可能です。リンクされたドキュメントは、あなたが得るすべての証拠です。 –

+1

PHPコアで作業する人には、より多くの情報があるかもしれません。問題に遭遇してバグレポートを提出した人は、より多くの情報を持っているかもしれません。 PHPのオブジェクト指向のドキュメントは、しばしば可能なすべてを網羅していません。私は明らかな何かを見逃したかもしれない。 **あなた**が質問に答えることができないという理由だけで答えがないというわけではありません。 –

答えて

7

番号がさえドキュメントを無視して、あなた自身あなたは、いくつかの選択肢が残されている

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

のためにそれを見ることができます。 1つのオプションは、あなたが言うように、それを、IMO、最良の選択肢である

$a = new ArrayObject(array(1, 2, 3)); 
if (in_array(1, (array)$a)) 
{ 
    // stuff 
} 

をキャストすることです。 は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)と代替与え、それだけの価値はありません。

+1

「イタレーションはまったくお勧めしません。それはO(n)です」「in_array」自体はO(n)ですか? –

関連する問題