php - 如何从多维关联数组中删除重复的数组值?
问题描述
包含以下我正在尝试从多维关联数组中获取 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']]];
即使从多维数组中删除重复项,这里的数组也应该是相同的。
感谢您的时间和建议。
解决方案
您可以尝试以下方法:
$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"]]}
推荐阅读
- python - 如何在字符串列表中找到最长的字符串?
- google-cloud-platform - 无法删除 Google Cloud 项目
- python - 风筝没有找到pythonpath库,虽然python找到了
- python - Django 2.2 中的翻译不起作用
- javascript - JQuery 计算器数据数字不起作用 | 让 allclear 按钮工作
- react-admin - 使用 ReferenceInput 的完整记录,然后触发 API 调用并显示结果
- django - 序列化器是否有办法执行创建来保存作为外键的字段
- apache-spark - ExecutorPlugin:应用 JAR 中捆绑的插件类,在 executor 上找不到类
- r - 如何确定 rbind 后观察的原始数据集?
- c# - 列表不返回函数值