если бы кто-нибудь мог мне помочь здесь, я был бы бесконечно благодарен, потому что потратил около двух полных дней, пытаясь заставить это работать. Я хочу взять два многомерных массива и сравнить их, а затем удалить любые дубликаты записей.
Сценарий: значения в массиве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 отличается, но было бы больно их изменять, поскольку они являются именами столбцов базы данных.
Он должен полностью удалить массив, а не только значения. У меня были проблемы с предыдущими попытками, когда он оставляет массив () там, а затем это вызывает проблемы, когда я перебираю массив, генерирующий поля, которые пользователь может выбрать.
Пожалуйста помоги. Я куплю тебе много пива! 🙂
Спасибо, Стив
Я не знаю, как это сделать с помощью любой встроенной функции 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 ) ) */