【问题标题】:PHP multidimensional array - Counting the duplicate and mingle the duplicate with originalPHP多维数组 - 计算重复并将重复与原始混合
【发布时间】:2015-10-13 08:59:46
【问题描述】:
$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)
         );

【问题讨论】:

  • 赞成使用“混合”这个词。感觉就像一场 80 年代的学校舞会。
  • 不完全相同,但这里有一个类似的问题 - stackoverflow.com/questions/14202108/…
  • 与其展示一堆几乎正确的代码,不如描述你真正想要实现的目标。您想将所有重复项合并为一项并计算重复项的数量吗?
  • @deceze 我正在更新我期待的最终结果。这一切都很好。有没有办法以最短的代码实现它们以减少工作量。

标签: php arrays multidimensional-array


【解决方案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;
}, []);

要进行重复数据删除,请在数组中使用唯一键。这里我们使用序列化数组的哈希作为键,这是唯一标识比单个值更复杂的东西的最简单方法。如果项目已经存在,则只需增加一个计数器。

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 2020-04-28
    • 2013-07-23
    • 2015-06-04
    • 1970-01-01
    • 2023-04-02
    • 2021-08-31
    • 2016-05-14
    • 2012-09-16
    相关资源
    最近更新 更多