Вы можете перебрать родительский массив, сериализовать каждый дочерний массив и сохранить его в третьем массиве, а во время цикла проверять наличие серийного номера каждого следующего дочернего массива для всех предыдущих, сохраненных в третьем массиве.,Если он существует, удалите текущий дубликат из родительского массива по ключу.Приведенная ниже функция демонстрирует это.
function remove_duplicate_nested_arrays($parent_array)
$temporary_array = array(); // declare third, temporary array.
foreach($parent_array as $key => $child_array){ // loop through parent array
$child_array_serial = serialize($child_array); // serialize child each array
if(in_array($child_array_serial,$temporary_array)){ // check if child array serial exists in third array
unset($parent_array[$key]); // unset the child array by key from parent array if it's serial exists in third array
continue;
}
$temporary_array[] = $child_array_serial; // if this point is reached, the serial of child array is not in third array, so add it so duplicates can be detected in future iterations.
}
return $parent_array;
}
Этого также можно добиться в 1 строку, используя предложение @Jose Carlos Gp следующим образом:
$b = array_map('unserialize', array_unique(array_map('serialize', $a)));
Функция, приведенная выше, расширяет то, чтона самом деле происходит в решении 1 лайнера.