繁体   English   中英

根据两列中的值计算唯一的数据行

[英]Count unique rows of data based on the values in two columns

我有一个如下所示的多维数组,我想创建另一个数组来显示每个城市的唯一用户数。

Array
(
    [0] => Array
        (
            [id] => 1
            [city] => Melbourne
            [date_added] => 1435852550
            [user_name] => user_1
        )

    [1] => Array
        (
            [id] => 2
            [city] => Melbourne
            [date_added] => 1435852550
            [user_name] => user_1
        )

    [2] => Array
        (
            [id] => 3
            [city] => Sydeny
            [date_added] => 1435852550
            [user_name] => user_2
        )

    [3] => Array
        (
            [id] => 4
            [city] => Perth
            [date_added] => 1435852550
            [user_name] => user_3
        )
    [4] => Array
        (
            [id] => 5
            [city] => Perth
            [date_added] => 1435852550
            [user_name] => user_4
        )
)

我想要得到的是每个城市的唯一用户数量,如下所示:

Array
(
    [Melbourne] => 1
    [Sydeny] => 1
    [Perth] => 2
)

使用城市作为索引,数组 user_names 数组作为值,然后将值映射到值的长度。

foreach($array as $v)
{
  $temp[$v['city']][$v['user_name']] = 1;
}
$result = array_map(function($v){return count($v);}, $temp);

使用array_reduce函数的解决方案:

// $arr is your initial array

$hash = [];
$counts = array_reduce($arr, function($r, $a) use(&$hash){
    $hash_str = $a['city'] .'|'. $a['user_name'];
    if (!in_array($hash_str, $hash)) {
        $hash[] = $hash_str;
        (!isset($r[$a['city']]))? $r[$a['city']] = 1 : $r[$a['city']] += 1;
    }
    return $r;
}, []);

print_r($counts);

@LF00 的答案是只循环两次并使用一组嵌套的关联键对数据进行分组。 我推荐这种方法胜过调用in_array()任何其他方法。

@LF00 答案的功能风格版本是:

代码:(演示

var_export(
    array_map(
        'count',
        array_reduce(
            $array,
            function($result, $row) {
                $result[$row['city']][$row['user_name']] = true;
                return $result;
            }
        )
    )
);

@LF00 的答案在array_map()调用count()可能更简洁。

代码:(演示

$result = [];
foreach ($array as $row) {
    $result[$row['city']][$row['user_name']] = true;
}
var_export(array_map('count', $result));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM