вы можете попробовать следующее:
$a=array_values(array_unique(array_merge(...$array['games'])));
Предполагается, что все ваши используемые значения ниже $array['games']
.
Редактировать:
Вот еще один способ, используя array_walk
:
array_walk($array['games'],function($itm){global $res; $res[json_encode($itm)]=$itm;});
echo json_encode(array_values($res));
Мне не очень нравится глобальный массив $res
, но я считаю, что это путь вперед.В функции обратного вызова array_walk()
я добавляю все значения в ассоциативный массив ($res
).Ключи являются JSON-представлениями их фактических значений.Таким образом, я перезапишу идентичные значения в ассоциативном массиве $res
и получу набор уникальных значений, когда в конце применю функцию array_values()
, чтобы превратить ее обратно в неассоциативный массив.
Результат:
[["vollyball","football"],["rubby","chess"]]
Вот небольшая демонстрация, которую вы можете проверить: http://rextester.com/JEKE60636
2.edit
Используя функцию-обертку, теперь я могу обойтись без глобальной переменной $res
и выполнить операцию на месте, т.е. удалить дублирующиеся элементы непосредственно из исходного массива:
function unique(&$ag){
array_walk($ag,function($itm,$key) use (&$ag,&$res) {
if (isset($res[json_encode($itm)])) array_splice($ag,$key,1);
else $res[json_encode($itm)]=1.;
});
}
unique($array['games']);
echo json_encode($array)
Это приведет к
{"games":[["vollyball","football"],["rubby","chess"]]}
см. Здесь: http://rextester.com/YZLEK39965