Как отфильтровать сложный многомерный массив?
Всем привет. Имеется массив вида
$array = array (
0 =>
array (
'domain' => '.mydomain.com',
'expirationDate' => '1671845325,529',
'hostOnly' => false,
'httpOnly' => false,
'name' => 'SID',
'path' => '/',
'sameSite' => 'unspecified',
'secure' => false,
'session' => false,
'storeId' => '0',
'value' => '4wdY_czyOdfgd5hfgh34h870uuj7LRagEE53hV3_gghetrxC-717H5-p5ycfP_uJomw.',
'priority' => 'high',
),
1 =>
array (
'domain' => '.mydomain.com',
'expirationDate' => '1671845325,529',
'hostOnly' => false,
'httpOnly' => true,
'name' => '__Secure-3PSID',
'path' => '/',
'sameSite' => 'norestriction',
'secure' => true,
'session' => false,
'storeId' => '1',
'value' => '4wdY_czyKmbn75De2Z13H8iMhL8h870uuj7LRagEE53hV3_guZ2W7Qf-y8NKsjpLmuNkEAw.',
'priority' => 'high',
),
2 =>
array (
'domain' => '.mydomain.com',
'expirationDate' => '1671845325,529',
'hostOnly' => false,
'httpOnly' => false,
'name' => 'SID',
'path' => '/',
'sameSite' => 'unspecified',
'secure' => false,
'session' => false,
'storeId' => '0',
'value' => '4wdY_czyOdfgd5hfgh34h870uuj7LRagEE53hV3_gghetrxC-717H5-p5ycfP_uJomw.',
'priority' => 'high',
),
);
Очевидно, что в массиве элементы 0 и 2 равны (одинаковые массивы). Как лучше всего отфильтровать массив, оставив в нём только уникальные элементы? Иными словами привести его к виду:
$array = array (
0 =>
array (
'domain' => '.mydomain.com',
'expirationDate' => '1671845325,529',
'hostOnly' => false,
'httpOnly' => false,
'name' => 'SID',
'path' => '/',
'sameSite' => 'unspecified',
'secure' => false,
'session' => false,
'storeId' => '0',
'value' => '4wdY_czyOdfgd5hfgh34h870uuj7LRagEE53hV3_gghetrxC-717H5-p5ycfP_uJomw.',
'priority' => 'high',
),
1 =>
array (
'domain' => '.mydomain.com',
'expirationDate' => '1671845325,529',
'hostOnly' => false,
'httpOnly' => true,
'name' => '__Secure-3PSID',
'path' => '/',
'sameSite' => 'norestriction',
'secure' => true,
'session' => false,
'storeId' => '1',
'value' => '4wdY_czyKmbn75De2Z13H8iMhL8h870uuj7LRagEE53hV3_guZ2W7Qf-y8NKsjpLmuNkEAw.',
'priority' => 'high',
)
);
Встроенная функция php
$clean = array_unique ( $array );
здесь не работает и выдаёт ошибки:
<br />
<b>Notice</b>: Array to string conversion in <b>[...][...]</b> on line <b>52</b><br />
<br />
<b>Notice</b>: Array to string conversion in <b>[...][...]</b> on line <b>52</b><br />
<br />
<b>Notice</b>: Array to string conversion in <b>[...][...]</b> on line <b>52</b><br />
Есть решение у данной задачи?
Ответы (1 шт):
Для осуществлении фильтрации массива на уникальные элементы, Вам необходимо передать флаг SORT_REGULAR
array_unique($array, SORT_REGULAR )
По умолчанию используется SORT_STRING, по этому каждый элемент в Вашем примере интерпретатор преобразовывал в строку(что гласит соответственно ошибка), а уже после сортирует и сравнивает.
Виды сортировок флагов:
SORT_REGULAR - нормальное сравнение элементов (типы не меняются)
SORT_NUMERIC - элементы сравниваются как числа
SORT_STRING - элементы сравниваются как строки
SORT_LOCALE_STRING - сравнивает элементы как строки, с учетом текущей локали.
Кстати, функция array_unique удаляет не уникальные элементы сохраняющая ключи. Это значит, что в массиве возможно будут пробелы. Чтобы исправить это, используйте след. код:
array_values(array_unique($array, SORT_REGULAR ));