in_array()
做對象比較,它檢查所有屬性是否相同? 如果$obj1 === $obj2
,它會只是做指針比較呢?in_array如何檢查一個對象是否在一個對象數組中?
我使用的是ORM,所以如果$obj1->getId()
已經在數組中了,如果它進行對象比較,我寧願循環對象測試。如果不是,in_array
更簡潔。
in_array()
做對象比較,它檢查所有屬性是否相同? 如果$obj1 === $obj2
,它會只是做指針比較呢?in_array如何檢查一個對象是否在一個對象數組中?
我使用的是ORM,所以如果$obj1->getId()
已經在數組中了,如果它進行對象比較,我寧願循環對象測試。如果不是,in_array
更簡潔。
in_array()
確實鬆散比較($a == $b
),除非你傳遞TRUE
到第三個參數,在這種情況下,它確實嚴格比較($a === $b
)。
語義,in_array($obj, $arr)
是相同的:
foreach ($arr as &$member) {
if ($member == $obj) {
return TRUE;
}
}
return FALSE;
...和in_array($obj, $arr, TRUE)
是相同的:
foreach ($arr as &$member) {
if ($member === $obj) {
return TRUE;
}
}
return FALSE;
...並引述什麼這實際上會檢查manual:
當使用比較運算符(==)時,對象變量是compa紅色,即:如果兩個對象實例具有相同的屬性和值,並且是同一類的實例,則它們是相等的。
另一方面,當使用身份運算符(===)時,當且僅當它們引用同一個類的同一實例時,對象變量纔是相同的。
對象始終是PHP 5+中的引用,並且只能使用clone
複製(因此創建一個新對象)。
這意味着你應該可以使用in_array()
。
太棒了,謝謝。有一個愚蠢的計時器,所以我不能接受另外5分鐘。 – yellottyellott 2012-07-31 15:32:44