📅  最后修改于: 2023-12-03 15:08:55.920000             🧑  作者: Mango
在 PHP 中,如果你需要从多维数组中删除重复的值,可以使用 array_unique()
函数来解决。然而,这个函数只能用于一维数组,对于多维数组并不适用。
下面提供几种实现方式来从多维数组中删除重复值:
可以使用递归函数来遍历每个子数组,使用 array_unique()
函数去重。
function unique_multidim_array($array, $key) {
$temp_array = array();
foreach($array as $val) {
if(!isset($temp_array[$val[$key]])) {
$temp_array[$val[$key]] = $val;
}
}
return array_values($temp_array);
}
// 使用
$array = array(
array('id' => '1', 'name' => 'foo'),
array('id' => '2', 'name' => 'bar'),
array('id' => '1', 'name' => 'foo'),
array('id' => '3', 'name' => 'baz')
);
$array = unique_multidim_array($array, 'id');
按照指定的键名进行排序,然后使用两个指针逐个比较。如果两个子数组的键值相等,则将后面的子数组删除。
function unique_multidim_array($array, $key) {
$temp_array = array();
$i = 0;
$key_array = array();
foreach($array as $val) {
if(!in_array($val[$key], $key_array)) {
$key_array[$i] = $val[$key];
$temp_array[$i] = $val;
}
$i++;
}
return $temp_array;
}
// 使用
$array = array(
array('id' => '1', 'name' => 'foo'),
array('id' => '2', 'name' => 'bar'),
array('id' => '1', 'name' => 'foo'),
array('id' => '3', 'name' => 'baz')
);
$array = unique_multidim_array($array, 'id');
array_reduce
函数使用 array_reduce()
函数和 array_replace_recursive()
函数来删除重复的子数组。
function unique_multidim_array($array, $key) {
$result = array_reduce($array, function($carry, $item) use($key) {
return !isset($carry[$item[$key]]) ? ($carry[$item[$key]] = $item) && $carry : array_replace_recursive($carry, [$item[$key] => $item]);
}, []);
return $result;
}
// 使用
$array = array(
array('id' => '1', 'name' => 'foo'),
array('id' => '2', 'name' => 'bar'),
array('id' => '1', 'name' => 'foo'),
array('id' => '3', 'name' => 'baz')
);
$array = unique_multidim_array($array, 'id');
这里介绍了三种方法来从多维数组中删除重复值,可以根据实际需求选择合适的方式。