Intereting Posts
Каков самый простой способ добавления сервлетов Java на WAMP-настроенную машину? Sendgrid Azure PHP MySQL исправляет пробелы автоинкремента в двух таблицах Soap – base64 двоичные данные в PHP Simplexml: синтаксический анализ HTML оставляет вложенные элементы внутри элемента с текстовым узлом неопределенная переменная, но переменная определена / объявлена Как передать json-данные в html с php? проверьте, является ли значение из цикла foreach в массиве Шифрование и расшифровка текста с помощью RSA в PHP Автоматически перенаправлять пользователя при сеансе Тайм-аут или бездействует лучший подход, чем сохранение пароля mysql в текстовом виде в файле конфигурации? Назад Кэширование навигация – IE PHP или htaccess делают страницу динамического URL-адреса равным 404, когда элемент отсутствует в БД массив сохранения cakephp Преобразование открытого ключа открытого ключа RSA в формат OpenSSH (PHP)

Многомерные массивы PHP – удаление дубликатов

если бы кто-нибудь мог мне помочь здесь, я был бы бесконечно благодарен, потому что потратил около двух полных дней, пытаясь заставить это работать. Я хочу взять два многомерных массива и сравнить их, а затем удалить любые дубликаты записей.

Сценарий: значения в массиве2 уже были присвоены профилю пользователя. Значения в массиве 1 – это ВСЕ доступные значения, которые пользователь может выбрать. Я хочу сравнить их так, чтобы в качестве опции были заданы только те, которые еще не были назначены (слева в массиве) …

$array1 = array( [0] => array( [id] => 3 [name] => Eye Colour ) [1] => array( [id] => 1 [name] => Hair Colour ) [2] => array( [id] => 5 [name] => Hair Length ) [3] => array( [id] => 4 [name] => Height ) ); $array2 = array( [0] => array( [attribute_id] => 3 [name] => Eye Colour [active] => 1 ) [1] => array( [attribute_id] => 5 [name] => Hair Length [active] => 1 ) ) ); 

Функция array_diff () PHP не работает с многомерными массивами, и у меня был хороший поиск, но я не могу найти ничего, что сработает для меня!

Результат, основанный на вышеуказанных двух массивах, должен быть:

 $array1 = array( [0] => array( [id] => 1 [name] => Hair Colour ) [1] => array( [id] => 4 [name] => Height ) ); 

Поле [active] не имеет значения, поэтому мне просто нужно сравнить его ID и поля Name. Я понимаю, что имя двух полей id отличается, но было бы больно их изменять, поскольку они являются именами столбцов базы данных.

Он должен полностью удалить массив, а не только значения. У меня были проблемы с предыдущими попытками, когда он оставляет массив () там, а затем это вызывает проблемы, когда я перебираю массив, генерирующий поля, которые пользователь может выбрать.

Пожалуйста помоги. Я куплю тебе много пива! 🙂

Спасибо, Стив

Solutions Collecting From Web of "Многомерные массивы PHP – удаление дубликатов"

Я не знаю, как это сделать с помощью любой встроенной функции PHP, но вот пользовательский:

 $array1 = array( array( 'id' => 3, 'name' => 'Eye Colour' ), array( 'id' => 1, 'name' => 'Hair Colour' ), array( 'id' => 5, 'name' => 'Hair Length' ), array( 'id' => 4, 'name' => 'Height' ), ); $array2 = array( array( 'attribute_id' => 3, 'name' => 'Eye Colour', 'active' => 1 ), array( 'attribute_id' => 5, 'name' => 'Hair Length', 'active' => 1 ) ); // function to remove duplicates function myArrayDiff($array1, $array2) { // loop through each item on the first array foreach ($array1 as $key => $row) { // loop through array 2 and compare foreach ($array2 as $key2 => $row2) { if ($row['id'] == $row2['attribute_id']) { // if we found a match unset and break out of the loop unset($array1[$key]); break; } } } return array_values($array1); } $array3 = myArrayDiff($array1, $array2); print_r($array3); /* result: Array ( [0] => Array ( [id] => 1 [name] => Hair Colour ) [1] => Array ( [id] => 4 [name] => Height ) ) */ с $array1 = array( array( 'id' => 3, 'name' => 'Eye Colour' ), array( 'id' => 1, 'name' => 'Hair Colour' ), array( 'id' => 5, 'name' => 'Hair Length' ), array( 'id' => 4, 'name' => 'Height' ), ); $array2 = array( array( 'attribute_id' => 3, 'name' => 'Eye Colour', 'active' => 1 ), array( 'attribute_id' => 5, 'name' => 'Hair Length', 'active' => 1 ) ); // function to remove duplicates function myArrayDiff($array1, $array2) { // loop through each item on the first array foreach ($array1 as $key => $row) { // loop through array 2 and compare foreach ($array2 as $key2 => $row2) { if ($row['id'] == $row2['attribute_id']) { // if we found a match unset and break out of the loop unset($array1[$key]); break; } } } return array_values($array1); } $array3 = myArrayDiff($array1, $array2); print_r($array3); /* result: Array ( [0] => Array ( [id] => 1 [name] => Hair Colour ) [1] => Array ( [id] => 4 [name] => Height ) ) */