Подтвердить что ты не робот

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

У меня есть следующая переменная $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

4b9b3361

Ответ 1

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

var_dump($uniques);

Ответ 2

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);

Ответ 3

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

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

$uniqueArray = array_unique($rows, SORT_REGULAR);

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

Ответ 4

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

$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;
}