Сравнение двух многомерных массивов объектов

#php #multidimensional-array

#php #многомерный массив

Вопрос:

Я изо всех сил пытаюсь сравнить 2 многомерных массива объектов следующим образом и добавить разницу в пустой массив.

Array1

 array(1) { 
[0]=> object(stdClass)#393 (1) { 
       ["ID"]=> 
       string(3) "433" 
  } 
} 
 

Массив 2

 array(1) { 
[0]=> object(stdClass)#386 (1) { 
       ["ID"]=> 
       string(3) "433" 
  } 
} 
 

До сих пор я использовал следующую функцию:

 function compare_arrays($Array1, $Array2){

$result = array();
    foreach ($Array2 as $index => $newItem) {
    foreach ($Array1 as $oldItem) {             
    if($Array2['ID'] === $oldItem['ID'])
    {
       $result[] = $index;
    }
  }                     
}               

return $resu<
}
 

Я получаю следующую ошибку?

Неустранимая ошибка: невозможно использовать объект типа stdClass в качестве массива

Может кто-нибудь, пожалуйста, указать мне, где я ошибаюсь? Или, если есть другой более простой подход?

ИСПРАВИТЬ

Код исправлен в соответствии с Adeel и Fabricator

Пришлось создать специальный класс для создания пустого объекта, а затем присвоить ему значение.

 function compare_arrays($para1, $para2){
    $result = array();
            /*Special class to create a blank object*/
    $data = new stdClass();

    foreach ($para2 as $index => $newItem) {
        foreach ($para1 as $oldItem) {      
            $test2 = $oldItem->ID;
            if($newItem->ID === $oldItem->ID)
            {
                $data->ID = $newItem->ID;

                $result[] = $data;                  
                var_dump($results);
            }
        }                       
    }               
    return $resu<
}
 

Комментарии:

1. вы пробовали передавать по ссылке?

2. использовать ->ID вместо ['ID'] ?

3. и $Array2['ID'] должно быть $newItem->ID ?

Ответ №1:

Чтобы получить доступ к этому объекту класса std, вам нужно получить к нему доступ $Array2->ID следующим образом: вы обращаетесь к нему как к массиву, поэтому появляется эта ошибка.