Ian*_*Ian 287 php arrays duplicate-data
如何从PHP中的多维数组中删除重复值?
示例数组:
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
)
)
Run Code Online (Sandbox Code Playgroud)
小智 617
这是另一种方式.不保存任何中间变量.
我们使用它来删除各种重叠查询的结果.
$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
Run Code Online (Sandbox Code Playgroud)
Ja͢*_*͢ck 223
从5.2.9开始,array_unique()如果你使用这样的SORT_REGULAR标志就可以使用:
array_unique($array, SORT_REGULAR);
Run Code Online (Sandbox Code Playgroud)
这使得函数比较元素的相等性,就好像$a == $b正在使用一样,这非常适合您的情况.
产量
Array
(
[0] => Array
(
[0] => abc
[1] => def
)
[1] => Array
(
[0] => ghi
[1] => jkl
)
[2] => Array
(
[0] => mno
[1] => pql
)
)
Run Code Online (Sandbox Code Playgroud)
但请记住,文档说明:
array_unique()不适用于多维数组.
小智 59
我有一个类似的问题,但我找到了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'));
?>
Run Code Online (Sandbox Code Playgroud)
OIS*_*OIS 29
其他方式.也将保留密钥.
function array_unique_multidimensional($input)
{
$serialized = array_map('serialize', $input);
$unique = array_unique($serialized);
return array_intersect_key($input, $unique);
}
Run Code Online (Sandbox Code Playgroud)
Jer*_*ten 20
用户对array_unique()文档的注释有很多解决方案.这是其中之一:
kenrbnsn at rbnsn dot com
27-Sep-2005 12:09另一个用于多维数组的Array_Unique.我只在二维数组上测试过它,但它可能会被推广到更多,或者使用递归.
此函数使用serialize,array_unique和unserialize函数来完成工作.
Run Code Online (Sandbox Code Playgroud)function multi_unique($array) { foreach ($array as $k=>$na) $new[$k] = serialize($na); $uniq = array_unique($new); foreach($uniq as $k=>$ser) $new1[$k] = unserialize($ser); return ($new1); }
这是来自http://ca3.php.net/manual/en/function.array-unique.php#57202.
aut*_*tix 15
如果"删除重复项"意味着"删除重复项,但让其中一个",则解决方案可能是先array_unique(...)在"标识符列"上应用,然后在原始数组中删除已从列数组中删除的所有键:
$array = [
[
'id' => '123',
'foo' => 'aaa',
'bar' => 'bbb'
],
[
'id' => '123',
'foo' => 'ccc',
'bar' => 'ddd'
],
[
'id' => '567',
'foo' => 'eee',
'bar' => 'fff'
]
];
$ids = array_column($array, 'id');
$ids = array_unique($ids);
$array = array_filter($array, function ($key, $value) use ($ids) {
return in_array($value, array_keys($ids));
}, ARRAY_FILTER_USE_BOTH);
Run Code Online (Sandbox Code Playgroud)
结果是:
Array
(
[0] => Array
(
[id] => 123
[foo] => aaa
[bar] => bbb
)
[2] => Array
(
[id] => 567
[foo] => eee
[bar] => fff
)
)
Run Code Online (Sandbox Code Playgroud)
Mah*_*ary 10
Array
(
[0] => Array
(
[id] => 1
[name] => john
)
[1] => Array
(
[id] => 2
[name] => smith
)
[2] => Array
(
[id] => 3
[name] => john
)
[3] => Array
(
[id] => 4
[name] => robert
)
)
$temp = array_unique(array_column($array, 'name'));
$unique_arr = array_intersect_key($array, $temp);
Run Code Online (Sandbox Code Playgroud)
这将从数组中删除重复的名称.钥匙是唯一的
| 归档时间: |
|
| 查看次数: |
227674 次 |
| 最近记录: |