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";