У меня есть следующие переменные $ rows:
Массив (
- PHP: функция группировки массива объектов по значению
- Создание случайного уникального идентификатора с помощью PHP
- Создание уникального идентификатора в PHP
- Zend Framework генерирует уникальную строку
- Как использовать array_unique для массива массивов?
[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; }