繁体   English   中英

计算数组列中的唯一值

[英]Count unique values in a column of an array

我有一个这样的数组:

$arr = [
    1 => ['A' => '1', 'C' => 'TEMU3076746'],
    2 => ['A' => '2', 'C' => 'FCIU5412720'],
    3 => ['A' => '3', 'C' => 'TEMU3076746'],
    4 => ['A' => '4', 'C' => 'TEMU3076746'],
    5 => ['A' => '5', 'C' => 'FCIU5412720']
];

我的目标是计算二维数组的C列中的不同值。

数组中的总行count($arr)如下所示: count($arr) (即5 )。

如何计算“C”列中包含唯一值的行数?

如果我删除了C列中的重复值,则只有: TEMU3076746FCIU5412720

因此,我想要的输出是2

希望这个最简单的一个会有所帮助。 这里我们使用array_columnarray_uniquecount

在此处尝试此代码段

echo count(
        array_unique(
                array_column($data,"C")));

结果: 2

组合array_maparray_uniquecount

$array = [ /* your array */ ];
$count = count(
    array_unique(
        array_map(function($element) { 
            return $element['C']; 
        }, $array))))

或者按照sahil gulati的建议使用array_column,array_map可以做更多的东西,这里可能不需要。

我有一个非常相似的需求,我使用了一个略有不同的方法。

我有几个团队参与的活动,我需要知道每个活动中有多少个团队。 换句话说,我不需要知道有多少不同的项目“C”,但TEMU3076746FCIU5412720有多少项。

然后代码将按原样

$nbCs = array_count_values ( array_column ( $array, 'C' ) );

$nbCs将发出一个values = Array([TEMU3076746] => 3 [FCIU5412720] => 2)数组values = Array([TEMU3076746] => 3 [FCIU5412720] => 2)

请参阅沙箱代码中的示例

array_column() ,使用array_column()的特殊能力,使用目标列的值分配新的第一级键。 这提供了所需的唯一性效果,因为数组不能在同一级别包含重复的键。

代码:(演示

$arr = [
    1 => ['A' => '1', 'C' => 'TEMU3076746'],
    2 => ['A' => '2', 'C' => 'FCIU5412720'],
    3 => ['A' => '3', 'C' => 'TEMU3076746'],
    4 => ['A' => '4', 'C' => 'TEMU3076746'],
    5 => ['A' => '5', 'C' => 'FCIU5412720']
];

echo count(array_column($arr, 'C', 'C'));
// 2

完全清楚, array_column($arr, 'C', 'C')产生:

array (
  'TEMU3076746' => 'TEMU3076746',
  'FCIU5412720' => 'FCIU5412720',
)

这也适用于array_column($arr, null, 'C') ,但这会创建一个更大的临时数组。


ps 有一个边缘案例可能涉及寻求独特浮点值的研究人员。 使用浮点值分配新的关联键不合适/容易出错,因为键将失去精度(被截断为整数)。

在浮点数的边缘情况下,回count(array_unique(array_column($arr, 'B)))性能较低的技术: count(array_unique(array_column($arr, 'B))) Demo

$data=array();
$data=[
       1 => [
             'A' => '1'
             'C' => 'TEMU3076746'
            ]

       2 => [
             'A' => '2'
             'C' => 'FCIU5412720'
            ]

       3 => [
             'A' => '3'
             'C' => 'TEMU3076746'
            ]
       
       4 => [
            'A' => '4'
            'C' => 'TEMU3076746'
            ]

       5 => [
             'A' => '5'
             'C' => 'FCIU5412720'
           ]
        ];

 $total_value=count(
    array_unique(
            array_column($data,"C")));
echo $total_value;

暂无
暂无

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

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