Вот еще один способ. Промежуточные переменные не сохраняются.
Мы использовали это для удаления дубликатов результатов из множества перекрывающихся запросов.
$input = array_map("unserialize", array_unique(array_map("serialize", $input)));