Что я пытаюсь сделать: Сравните значение массива, которое является объектом с другими объектами в массиве. Если определенные свойства объекта в игле (объект, который я сравниваю с другими объектами) соответствуют тем же свойствам в другом объекте в стоге сена, затем слияние определенных свойств от иглы к совпадающему объекту в стоге сена и снятие иголки.Как сравнить и удалить объект в массиве с другими объектами в массиве?
Некоторые псевдо-код:
<?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])' to 'unset ($ haystack [++ $ x])', это увеличивает '$ i', пропуская индекс unset на следующей итерации цикла –