我在做什麼:將一個數組的值與數組中的其他對象進行比較。如果針中的某些對象屬性(我與其他對象進行比較的對象)與乾草堆中另一個對象中的相同屬性相匹配,則將針的某些屬性合併到乾草堆中的匹配對象並取消固定針。如何比較和取消設置數組中的對象與數組中的其他對象?
一些僞代碼:
<?php
$haystack = array($obj1, $obj2, $obj3);
if(!empty($haystack)){
for($x=0;$x<count($haystack);$x++){
if($haystack[$x]->prop1 == $haystack[$x+1]->prop1 && $haystack[$x]->prop2 == $haystack[$x+1]->prop2){
$haystack[$x]->combined1 = $haystack[$x]->prop1.','.$haystack[$x+1]->prop1;
unset($haystack[$x+1]);
}
}
}
?>
你能在對象中實現一個'toArray'方法嗎?如果不是,則使用'(array)$ obj'將它們轉換爲數組,然後使用'array_intersect'來確定差異,如果有的話。 –
@EliasVanOotegem做比較比較容易。我認爲這個問題與取消當前正在迭代的數組中的下一個元素有關。通過訪問$ array [$ x + 1],它將迭代器向前移動並搞亂比較(我認爲)。 – Chad
將unset($ haystack [$ x + 1])'改爲'unset($ haystack [++ $ x])',這會增加'$ i',跳過下一個循環迭代的未設置索引 –