Php 数组计数()问题
如何获得以下结果:Php 数组计数()问题,php,Php,如何获得以下结果: Array ( [B] => 1 ) Array ( [B] => 1 ) Array ( [C] => 1 ) Array ( [C] => 1 ) Array ( [B] => 1 ) Array ( [B] => 1 ) Array ( [B] => 1 ) Array ( [B] => 1 ) Array ( [B] => 1 ) Array ( [B] => 1 ) 下面是一个函数,它将
Array ( [B] => 1 )
Array ( [B] => 1 )
Array ( [C] => 1 )
Array ( [C] => 1 )
Array ( [B] => 1 )
Array ( [B] => 1 )
Array ( [B] => 1 )
Array ( [B] => 1 )
Array ( [B] => 1 )
Array ( [B] => 1 )
下面是一个函数,它将返回特定字母的总和:
score for B = 8
score for C = 2
然后像这样使用它:
function getTotal($key, $array) {
$total = 0;
foreach ($array as $currentArray) {
foreach ($currentArray as $currentKey => $currentValue) {
if ($key === $currentKey) {
$total += $currentValue;
}
}
}
return $total;
}
$base=array(array(“B”=>1)、array(“C”=>1)、array(“B”=>1)、array(“B”=>1)、array(“C”=>1));
打印($base);//只是为了调试
$score=array_reduce($base,function(&$rst,$i){
foreach($i为$k=>$s){
如果(空($rst[$k])){
$rst[$k]=0;
}
$rst[$k]+=$s;
}
返回$rst;
},数组());
打印(分数);
打印的输出($base)
:
打印($score)的输出:
如果子数组仅包含1项,则可以使用以下代码
Array
(
[B] => 3
[C] => 2
)
这里,
- 对数组的所有值进行计数
- 将回调应用于给定数组的元素
- 从数组中获取密钥
$array
,然后向其中添加项目。循环结束后,调用数组\计数\值
array_count_values(array_map('key', $array));
我假设实际上有一个数组包含这些关联数组?你说的是二维数组吗?@AlvinWong这是数组中循环的结果。用英语很难说(@najuillah.com然后请在代码中显示是;)或使用。@WaleedKhan,如果所有值都是1,这将起作用,但我从他的示例中推断,他想计算一封信的实际值,而不仅仅是出现的次数。谢谢@passerby我会尝试它…:)但是如何回显结果?@najuillah.com我不确定是否理解您的意思…
$score
包含每个键的分数(正如我在最后一行中打印的那样)。我将更新答案以使其更清楚。我的代码为:$base=array(顶部示例中的数组);如何使用我的代码替换“顶部示例中的数组”?因为我的代码是循环的结果。@najuillah.com请尝试演示您是如何在问题中得到结果的,以便我们能够提供相应的帮助——我们现在都假设您手头已经有了该数组。所有成员都会非常、非常、非常、非常快速地做出响应。我不知道该先回答哪一个问题(好的,各位,我将尝试你们提供的所有代码。我要对大家说很多感谢:)我的代码:“数组('B'=>'1')、数组('B'=>'1')、数组('B'=>'1')、数组('C'=>'1')、数组('C'=>'1')”来自循环。第一个问题中的代码是最终结果。如何替换它?我的php代码:$nialiakhirpraktikum=$ntugasakhir+$ratarata//来自其他过程if($nialiakhirpraktikum>79){$grade=“A”}else if($nialiakhirpraktikum67){$grade=“B”}else if($nialiakhirpraktikum55){$grade=“C”}else if($nialiakhirpraktikum44){$grade=“D”}else{$grade=“E”}$array=array($grade);打印(数组计数值($array));感谢您的编辑和代码。但我的结果是这样的:B=1的分数有什么不对?我听从了你的指示,但失败了(谢谢你的帮助。我的问题已经解决了…就像你的指示一样。我只是在循环开始之前错误地放置了$array=array();:p谢谢你的帮助^_^
Array
(
[0] => Array
(
[B] => 1
)
[1] => Array
(
[C] => 1
)
[2] => Array
(
[B] => 1
)
[3] => Array
(
[B] => 1
)
[4] => Array
(
[C] => 1
)
)
Array
(
[B] => 3
[C] => 2
)
array_count_values(array_map('key', $array));
$array = array(); // initialize before loop
for(...){ /// sample loop
// your original code
$array[] = $grade; // add grades here
}
$grade_distribution = array_count_values($array); // count it
foreach($grade_distribution as $g => $count)
echo "score for $g = $count\n";