[英]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
列中的重复值,则只有: TEMU3076746
和FCIU5412720
因此,我想要的输出是2
。
希望这个最简单的一个会有所帮助。 这里我们使用array_column
, array_unique
和count
。
echo count(
array_unique(
array_column($data,"C")));
结果: 2
组合array_map , array_unique , count
$array = [ /* your array */ ];
$count = count(
array_unique(
array_map(function($element) {
return $element['C'];
}, $array))))
或者按照sahil gulati的建议使用array_column,array_map可以做更多的东西,这里可能不需要。
我有一个非常相似的需求,我使用了一个略有不同的方法。
我有几个团队参与的活动,我需要知道每个活动中有多少个团队。 换句话说,我不需要知道有多少不同的项目“C”,但TEMU3076746
和FCIU5412720
有多少项。
然后代码将按原样
$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.