Здравствуйте, объясните пожалуйста, что я делаю не так. Мне нужно сравнить 2 массива и получить данные, которых нет во втором массиве. Воспользовался информацией c форума по ссылке https://php.ru/manual/function.array-diff.html На моем примере получается следующее: Код (Text): $arr1 = (array)$systemCentr; $arr2 = (array)$mySystemCentr; $total = array_diff($arr1, $arr2); Перед этим я проверил, что Код (Text): dd($arr1) выводит Код (Text): array:2194 [▼ 0 => {#199 ▼ +"DisplayName0": " Update for Microsoft Office 2007 (KB2508958)" +"Publisher0": null +"ProdID0": "{########-####-####-####-############}_SharePointDesigner_{########-####-####-####-############}" } 1 => {#201 ▼ +"DisplayName0": "«Òàêñêîì-Ìàñòåð âûïóñêà ñåðòèôèêàòîâ x86»" +"Publisher0": "ÎÎÎ Òàêñêîì" +"ProdID0": "{########-####-####-####-############}" затем проверил Код (Text): dd($arr2) и получил Код (Text): array:2 [▼ 0 => {#2399 ▼ +"display_name": "ÎÎÎ Òàêñêîì" +"product_id": "{########-####-####-####-############}" +"publisher": "«Òàêñêîì-Ìàñòåð âûïóñêà ñåðòèôèêàòîâ x86»" } 1 => {#2401 ▼ +"display_name": "Update for Microsoft Office 2007 (KB2508958)" +"product_id": "{########-####-####-####-############}_SharePointDesigner_{########-####-####-####-############}" +"publisher": null } ] после проверки применяю Код (Text): $total = array_diff($arr1, $arr2); и получаю ошибку - (1/1)FatalErrorException Object of class stdClass could not be converted to string - Объект класса stdClass не может быть преобразован в строку объясните пожалуйста кто-нибудь из-за чего такое происходит?
Начинаю понимать, что получаю массив с объектами. Соответственно они и не сравниваются. Но отсюда вопрос как можно сравнить массив объектов с массивом объектов и получить отсутствующие значения?
Я совсем не понимаю точно не понимаю зачем рандом и два пустых массива. PHP: <?php class A { public $f = null; public function __construct(){ $this->f = mt_rand(1,10); } public function __toString(){ return (string) $this->f; } }; $objectsA = []; $objectsB = []; for($i=0; $i<11; $i++){ $obj = new A(); if($i%2){ $objectsA[] = $obj; }else{ $objectsB[] = $obj; } } //var_dump($objectsA, $objectsB); var_dump(array_diff($objectsA, $objectsB)); попробовал привести к строке PHP: $myText1 = (string)$mySystemCentr; $myText2 = (string)$SystemCentr $res = array_diff($objectsA, $objectsB)); получил ошибку Array to string conversion --- Добавлено --- нашел, что можно сделать так: PHP: $arr1 = array(); foreach($arr_source_1 as $o){ $arr1[] = $o->login } аналогично со вторым и после этого так: PHP: $arr_int = array_diff($arr1, $arr2); $arr_res = array(); foreach($arr_int as $v){ $o = new stdClass(); $0->login=$v; $arr_res[]=$o но почему то вызывает сомнения
Примитивный вариант сравнения PHP: foreach($array1 as $value1) { foreach($array2 as $value2) { if( $value1->login==$value2->login) echo "совпадение"; } }
Решено. Вдруг кому-нибудь пригодится. Получилось сделать вот таким образом: PHP: $arr1 = array(); foreach($systemCentr as $o){ $arr1[] = $o->ProdID0; }; $arr2 = array(); foreach($mySystemCentr as $v){ $arr2[] = $v->product_id; }; $arr_int = array_diff($arr1, $arr2); $arr_res = array(); foreach($arr_int as $post){ $o = new ExchangeController(); $o->ProdID=$post; $arr_res[]=$o; }; dd($arr_res);