2009-07-30 111 views
5

PHP有一個in_array函數用於檢查本地數組/集合中是否存在特定值。我正在尋找ArrayObject的等效函數/方法,但methods似乎沒有複製此功能。PHP的ArrayObject是否有in_array等價物?

我知道我可以將ArrayObject轉換爲(數組)並在in_array中使用它。我也知道我可以手動迭代ArrayObject並查找值。這兩者似乎都不是這樣做的「正確」方式。

如果您可以用證據進行備份,那麼「否」是非常合適的答案。

+0

您提供的文檔似乎很清楚地表明沒有這種方法。從迂迴的角度來說,我們不可能嚴格證明不存在這樣的功能。鏈接的文檔是你將要獲得的所有證據。 – 2009-07-30 20:11:25

+1

從事PHP內核工作的人可能會有更多信息。遇到問題並提交錯誤報告的人可能會獲得更多信息。 PHP OO文檔通常不能涵蓋所有可能的內容。我可能錯過了一些明顯的東西。僅僅因爲**你**不能回答這個問題並不意味着沒有答案。 – 2009-07-30 20:14:25

回答

7

號即使忽略的文件,你可以看到它自己

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)和不值得給出的替代品。