3

我有一个这样的数组:

$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)5)。

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

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

因此,我想要的输出是2.

4

5 回答 5

5

希望这个最简单的会有所帮助。这里我们使用array_column,array_uniquecount

在此处尝试此代码段

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

结果: 2

于 2017-08-31T09:55:30.227 回答
2

结合array_maparray_unique计数

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

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

于 2017-08-31T09:54:48.853 回答
1

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

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

然后代码将保持原样

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

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

请参阅沙盒沙盒代码中的示例

于 2018-03-05T11:00:31.953 回答
0
$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;
于 2021-10-23T02:43:34.490 回答
0

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

代码:(演示

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))) Demo

于 2021-10-23T22:31:52.633 回答