本文翻译自:How to remove duplicate values from a multi-dimensional array in PHP
How can I remove duplicate values from a multi-dimensional array in PHP? 如何从PHP的多维数组中删除重复值?
Example array: 数组示例:
Array
(
[0] => Array
(
[0] => abc
[1] => def
)
[1] => Array
(
[0] => ghi
[1] => jkl
)
[2] => Array
(
[0] => mno
[1] => pql
)
[3] => Array
(
[0] => abc
[1] => def
)
[4] => Array
(
[0] => ghi
[1] => jkl
)
[5] => Array
(
[0] => mno
[1] => pql
)
)
#1楼
参考:https://stackoom.com/question/1i2u/如何从PHP中的多维数组中删除重复的值
#2楼
An easy to read solution, probably not the most efficient: 一个易于阅读的解决方案,可能不是最有效的:
function arrayUnique($myArray){
if(!is_array($myArray))
return $myArray;
foreach ($myArray as &$myvalue){
$myvalue=serialize($myvalue);
}
$myArray=array_unique($myArray);
foreach ($myArray as &$myvalue){
$myvalue=unserialize($myvalue);
}
return $myArray;
}
#3楼
I had a similar problem but I found a 100% working solution for it. 我有一个类似的问题,但是我找到了100%可行的解决方案。
<?php
function super_unique($array,$key)
{
$temp_array = [];
foreach ($array as &$v) {
if (!isset($temp_array[$v[$key]]))
$temp_array[$v[$key]] =& $v;
}
$array = array_values($temp_array);
return $array;
}
$arr="";
$arr[0]['id']=0;
$arr[0]['titel']="ABC";
$arr[1]['id']=1;
$arr[1]['titel']="DEF";
$arr[2]['id']=2;
$arr[2]['titel']="ABC";
$arr[3]['id']=3;
$arr[3]['titel']="XYZ";
echo "<pre>";
print_r($arr);
echo "unique*********************<br/>";
print_r(super_unique($arr,'titel'));
?>
#4楼
Since 5.2.9 you can use array_unique()
if you use the SORT_REGULAR
flag like so: 从5.2.9开始,如果您使用SORT_REGULAR
标志,则可以使用array_unique()
:
array_unique($array, SORT_REGULAR);
This makes the function compare elements for equality as if $a == $b
were being used, which is perfect for your case. 这使函数可以像使用$a == $b
一样比较元素是否相等,这对于您的情况而言是完美的。
Output 输出量
Array
(
[0] => Array
(
[0] => abc
[1] => def
)
[1] => Array
(
[0] => ghi
[1] => jkl
)
[2] => Array
(
[0] => mno
[1] => pql
)
)
Keep in mind, though, that the documentation states: 但是请记住, 文档指出:
array_unique()
is not intended to work on multi dimensional arrays.array_unique()
不适用于多维数组。
#5楼
An alternative to serialize and unique 序列化和唯一的替代
$test = [
['abc','def'],
['ghi','jkl'],
['mno','pql'],
['abc','def'],
['ghi','jkl'],
['mno','pql'],
];
$result = array_reduce(
$test,
function($carry,$item){
if(!in_array($item,$carry)) {
array_push($carry,$item);
}
return $carry;
},
[]
);
var_dump($result);
/*
php unique.php
array(3) {
[0] =>
array(2) {
[0] =>
string(3) "abc"
[1] =>
string(3) "def"
}
[1] =>
array(2) {
[0] =>
string(3) "ghi"
[1] =>
string(3) "jkl"
}
[2] =>
array(2) {
[0] =>
string(3) "mno"
[1] =>
string(3) "pql"
}
}
*/ * /
#6楼
if you need to eliminate duplicates on specific keys, such as a mysqli id, here's a simple funciton 如果您需要消除特定键(例如mysqli id)上的重复项,请使用以下简单功能
function search_array_compact($data,$key){
$compact = [];
foreach($data as $row){
if(!in_array($row[$key],$compact)){
$compact[] = $row;
}
}
return $compact;
}
Bonus Points You can pass an array of keys and add an outer foreach, but it will be 2x slower per additional key. 奖励积分您可以传递一组键并添加一个外部foreach,但是每增加一个键,速度将降低2倍。