PHP 多维数组 - 计算重复项并将重复项与原始项混合


PHP multidimensional array - Counting the duplicate and mingle the duplicate with original

$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;
}, []);

要删除重复数据,请在数组中使用唯一键。在这里,我们使用序列化数组的哈希作为键,这是唯一标识比单个值更复杂的内容的最简单方法。然后,如果该项已存在,只需增加一个计数器即可。