Выбирайте из этого массива только уникальные значения массива

У меня есть следующие переменные $ rows:

Массив (

[0] => stdClass Object ( [product_sku] => PCH20 ) [1] => stdClass Object ( [product_sku] => PCH20 ) [2] => stdClass Object ( [product_sku] => PCH19 ) [3] => stdClass Object ( [product_sku] => PCH19 ) 

)

Мне нужно создать второй массив $ second, содержащий только уникальные значения:

Массив (

 [0] => stdClass Object ( [product_sku] => PCH20 ) [1] => stdClass Object ( [product_sku] => PCH19 ) 

)

Но когда я запускаю array_unique в $ rows, я получаю:

Обрезаемая фатальная ошибка : объект класса stdClass не может быть преобразован в строку в строке 191

 $uniques = array(); foreach ($array as $obj) { $uniques[$obj->product_sku] = $obj; } var_dump($uniques); 

array_unique()

Необязательный второй параметр sort_flags может использоваться для изменения поведения сортировки с использованием следующих значений:

Флаги типа сортировки:

  • SORT_REGULAR – обычно сравнивает элементы (не меняйте типы)
  • SORT_NUMERIC – сравнить элементы численно
  • SORT_STRING – сравнить элементы как строки
  • SORT_LOCALE_STRING – сравнить элементы как строки, основанные на текущей локали.

Также обратите внимание на изменения ниже

5.2.10 Изменено значение sort_flags по умолчанию для SORT_STRING.

5.2.9 Добавлена ​​опция sort_flags, по умолчанию – SORT_REGULAR. До 5.2.9 эта функция используется для сортировки массива с SORT_STRING внутренне.

 $values = array_unique($values, SORT_REGULAR); 

Поведение функции array_unique() по умолчанию заключается в том, чтобы сначала обрабатывать значения внутри строк. Так что происходит то, что PHP пытается превратить ваши объекты в строки (которые бросают ошибку).

Вы можете изменить свой вызов функции следующим образом:

 $uniqueArray = array_unique($rows, SORT_REGULAR); 

Это будет сравнивать значения без изменения их типа данных.

Пожалуйста, проверьте ниже код, я надеюсь, что это будет полезно для вас.

 $resultArray = uniqueAssocArray($actualArray, 'product_sku'); function uniqueAssocArray($array, $uniqueKey) { if (!is_array($array)) { return array(); } $uniqueKeys = array(); foreach ($array as $key => $item) { $groupBy=$item[$uniqueKey]; if (isset( $uniqueKeys[$groupBy])) { //compare $item with $uniqueKeys[$groupBy] and decide if you //want to use the new item $replace= false; } else { $replace=true; } if ($replace) $uniqueKeys[$groupBy] = $item; } return $uniqueKeys; }