首页 > 解决方案 > 如何从多维关联数组中删除重复的数组值?

问题描述

包含以下我正在尝试从多维关联数组中获取 array_unique 值

在这里,我只显示与此类似的示例数组。

$array =  ['games'=>[['vollyball', 'football'], ['vollyball', 'football'], ['rubby', 'chess']]];

这里是这样尝试的

foreach ($array as $key => &$value) {
    $value = array_unique($value);
}

echo "<pre>";
print_r($array);
echo "</pre>";
exit;

在这里我期待输出是,

 $array =  ['games'=>[['vollyball', 'football'], ['rubby', 'chess']]];

即使从多维数组中删除重复项,这里的数组也应该是相同的。

感谢您的时间和建议。

标签: phparraysmultidimensional-arrayarray-unique

解决方案


您可以尝试以下方法:

$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. 编辑

使用包装函数,我现在可以不使用全局变量$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


推荐阅读