使用 PHP 从多维(3 层以上)数组中删除重复值
Remove duplicate values from multidimensional (3+levels) array with PHP
我需要你的帮助。
我做过各种研究,但没有测试方法适用于 3 级或更多阵列。
我只需要在多维数组中保留唯一的值..
我的阵列:
Array
(
[sucesso] => Array
(
[LAUDO_VISTORIA] => Array
(
[0] => 0027
[2] => 30027
[3] => 0027
)
[LAUDO] => Array
(
[0] => 0027
[2] => 30027
[3] => 0027
)
[DADOS_DO_VEICULO] => Array
(
[0] => 0027
[1] => 30027
)
)
[code] => 201
)
请注意,如果您有带前导零的数字,您应该将它们存储为字符串,否则它们将被解释为八进制数。
当您输出它们时,您可以使用 (int) 来获得正确的类型转换。
下面的第一个代码通过使用 serialize
作为 array_map
中的回调来展平数组,使用 array_unique
删除重复项,然后使用 array_intersect_key
放回原处,该过程循环以到达数组的更深层次。
下面的第二个代码遵循相同的逻辑,但 array_unique
仅在每个数组键路径的最深层执行。
添加了 if/else 语句,因为并非所有数组键路径都具有相同的 length/depth。 (如果有人知道更好的方法,请告诉我。)
serialize
可以换成json_encode
,但我不确定哪个更快。
我不是很擅长解释事情是如何运作的,如果你能更好地改写我上面所说的话,请随意编辑。
删除多维数组中的重复项,包括重复的子数组和元素。
function multi_unique($array){
$temp = array_intersect_key($array, array_unique(array_map("serialize", $array)));
foreach ($temp as $key => $value){
if ( is_array($value) ){
$temp[$key] = multi_unique($value);
}
}
return $temp;
}
从每个关键路径的最深处的子数组中删除重复元素。
function multi_unique($array){
$temp = array_intersect_key($array, array_map("serialize", $array));
foreach ($temp as $key => $value){
if (is_array($value)){
$temp[$key] = multi_unique($value);
}
//the else if statement is to counter the problem where the deepest level of each path is different
else if (count($temp) == count($temp, COUNT_RECURSIVE)){
$temp=array_unique($temp);
}
}
return $temp;
}
我需要你的帮助。 我做过各种研究,但没有测试方法适用于 3 级或更多阵列。 我只需要在多维数组中保留唯一的值..
我的阵列:
Array ( [sucesso] => Array ( [LAUDO_VISTORIA] => Array ( [0] => 0027 [2] => 30027 [3] => 0027 ) [LAUDO] => Array ( [0] => 0027 [2] => 30027 [3] => 0027 ) [DADOS_DO_VEICULO] => Array ( [0] => 0027 [1] => 30027 ) ) [code] => 201 )
请注意,如果您有带前导零的数字,您应该将它们存储为字符串,否则它们将被解释为八进制数。 当您输出它们时,您可以使用 (int) 来获得正确的类型转换。
下面的第一个代码通过使用 serialize
作为 array_map
中的回调来展平数组,使用 array_unique
删除重复项,然后使用 array_intersect_key
放回原处,该过程循环以到达数组的更深层次。
下面的第二个代码遵循相同的逻辑,但 array_unique
仅在每个数组键路径的最深层执行。
添加了 if/else 语句,因为并非所有数组键路径都具有相同的 length/depth。 (如果有人知道更好的方法,请告诉我。)
serialize
可以换成json_encode
,但我不确定哪个更快。
我不是很擅长解释事情是如何运作的,如果你能更好地改写我上面所说的话,请随意编辑。
删除多维数组中的重复项,包括重复的子数组和元素。
function multi_unique($array){
$temp = array_intersect_key($array, array_unique(array_map("serialize", $array)));
foreach ($temp as $key => $value){
if ( is_array($value) ){
$temp[$key] = multi_unique($value);
}
}
return $temp;
}
从每个关键路径的最深处的子数组中删除重复元素。
function multi_unique($array){
$temp = array_intersect_key($array, array_map("serialize", $array));
foreach ($temp as $key => $value){
if (is_array($value)){
$temp[$key] = multi_unique($value);
}
//the else if statement is to counter the problem where the deepest level of each path is different
else if (count($temp) == count($temp, COUNT_RECURSIVE)){
$temp=array_unique($temp);
}
}
return $temp;
}