$users = array(
array(1,'name1'),
array(1,'name1'),
array(2,'name2'),
array(3,'name3')
);
现在添加以下代码后,我可以制作唯一的数组。
array_map("unserialize", array_unique(array_map("serialize", $users)));
我可以用以下代码计算重复项。但它缺少名称字段。因此,我需要做一些事情来获取名称以及重复项的 id 和计数。
array_count_values(array_map(function($item) {
return $item['id'];
}, $users));
我需要循环数组得到这样的东西吗?或者 php 中还有其他技巧吗?
$new_users = array(
array(1,'name1', 2), //two times + descending order
array(2,'name2', 1),
array(3,'name3', 1)
);
$new_users = array_reduce($users, function (array $new_users, array $user) {
$key = sha1(serialize($user));
if (isset($new_users[$key])) {
$new_users[$key][2]++;
} else {
$new_users[$key] = array_merge($user, [1]);
}
return $new_users;
}, []);
要删除重复数据,请在数组中使用唯一键。在这里,我们使用序列化数组的哈希作为键,这是唯一标识比单个值更复杂的内容的最简单方法。然后,如果该项已存在,只需增加一个计数器即可。