如何从多维关联数组中删除重复的数组值?
how to remove duplicate array value from multidimensional associative array?
包含以下内容我正在尝试从多维关联数组
中获取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
的情况下进行操作,并就地进行操作,即。 e.直接从源数组中删除重复元素:
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"]]}
包含以下内容我正在尝试从多维关联数组
中获取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
的情况下进行操作,并就地进行操作,即。 e.直接从源数组中删除重复元素:
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"]]}