Php 计算一个值在按另一个值分组的数组中出现的次数(年)

Php 计算一个值在按另一个值分组的数组中出现的次数(年),php,arrays,count,Php,Arrays,Count,我有一个数组,里面有一些信息 有两个重要的键datum和answer 这是我的阵列: Array ( [0] => Array ( [infoid] => 215 [company_id] => 57 [datum] => 2019 [tid] => 327 [catid] => 202 [in

我有一个数组,里面有一些信息

有两个重要的键
datum
answer

这是我的阵列:

Array
(
    [0] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 932
            [cid] => 202
            [answer] => ok
        )

    [1] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 930
            [cid] => 202
            [answer] => ok
        )

    [2] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 928
            [cid] => 202
            [answer] => ok
        )

    [3] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 926
            [cid] => 202
            [answer] => ok
        )

    [4] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 924
            [cid] => 202
            [answer] => ok
        )

    [5] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 922
            [cid] => 202
            [answer] => ok
        )

    [6] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 920
            [cid] => 202
            [answer] => ok
        )

    [7] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 918
            [cid] => 202
            [answer] => fout
        )

    [8] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 916
            [cid] => 202
            [answer] => ok
        )

    [9] => Array
        (
            [infoid] => 236
            [company_id] => 57
            [datum] => 2020
            [tid] => 324
            [catid] => 230
            [info_id] => 236
            [questionid] => 1192
            [cid] => 230
            [answer] => ok
        )

    [10] => Array
        (
            [infoid] => 236
            [company_id] => 57
            [datum] => 2020
            [tid] => 324
            [catid] => 230
            [info_id] => 236
            [questionid] => 1191
            [cid] => 230
            [answer] => ok
        )

    [11] => Array
        (
            [infoid] => 236
            [company_id] => 57
            [datum] => 2020
            [tid] => 324
            [catid] => 230
            [info_id] => 236
            [questionid] => 1190
            [cid] => 230
            [answer] => fout
        )

    [12] => Array
        (
            [infoid] => 236
            [company_id] => 57
            [datum] => 2020
            [tid] => 324
            [catid] => 230
            [info_id] => 236
            [questionid] => 1189
            [cid] => 230
            [answer] => ok
        )

    [13] => Array
        (
            [infoid] => 235
            [company_id] => 57
            [datum] => 2019
            [tid] => 329
            [catid] => 229
            [info_id] => 235
            [questionid] => 1187
            [cid] => 229
            [answer] => ok
        )

    [14] => Array
        (
            [infoid] => 235
            [company_id] => 57
            [datum] => 2019
            [tid] => 329
            [catid] => 228
            [info_id] => 235
            [questionid] => 1186
            [cid] => 228
            [answer] => ok
        )

    [15] => Array
        (
            [infoid] => 235
            [company_id] => 57
            [datum] => 2019
            [tid] => 329
            [catid] => 228
            [info_id] => 235
            [questionid] => 1185
            [cid] => 228
            [answer] => ok
        )

    [16] => Array
        (
            [infoid] => 236
            [company_id] => 57
            [datum] => 2020
            [tid] => 324
            [catid] => 230
            [info_id] => 236
            [questionid] => 1188
            [cid] => 230
            [answer] => ok
        )

    [17] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 934
            [cid] => 202
            [answer] => ok
        )

    [18] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 936
            [cid] => 202
            [answer] => ok
        )

    [19] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 938
            [cid] => 202
            [answer] => ok
        )

    [20] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 940
            [cid] => 202
            [answer] => ok
        )

    [21] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 942
            [cid] => 202
            [answer] => ok
        )

    [22] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 944
            [cid] => 202
            [answer] => ok
        )

    [23] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 946
            [cid] => 202
            [answer] => ok
        )

    [24] => Array
        (
            [infoid] => 215
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 202
            [info_id] => 215
            [questionid] => 948
            [cid] => 202
            [answer] => ok
        )

    [25] => Array
        (
            [infoid] => 235
            [company_id] => 57
            [datum] => 2019
            [tid] => 329
            [catid] => 228
            [info_id] => 235
            [questionid] => 1184
            [cid] => 228
            [answer] => ok
        )

    [26] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1154
            [cid] => 220
            [answer] => ok
        )

    [27] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1153
            [cid] => 220
            [answer] => ok
        )

    [28] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1152
            [cid] => 220
            [answer] => ok
        )

    [29] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1151
            [cid] => 220
            [answer] => ok
        )

    [30] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1150
            [cid] => 220
            [answer] => ok
        )

    [31] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1149
            [cid] => 220
            [answer] => ok
        )

    [32] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1147
            [cid] => 220
            [answer] => ok
        )

    [33] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1148
            [cid] => 220
            [answer] => fout
        )

    [34] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1145
            [cid] => 220
            [answer] => ok
        )

    [35] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1146
            [cid] => 220
            [answer] => ok
        )

    [36] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1144
            [cid] => 220
            [answer] => ok
        )

    [37] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1143
            [cid] => 220
            [answer] => ok
        )

    [38] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1142
            [cid] => 220
            [answer] => ok
        )

    [39] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1140
            [cid] => 220
            [answer] => ok
        )

    [40] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1141
            [cid] => 220
            [answer] => ok
        )

    [41] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1139
            [cid] => 220
            [answer] => ok
        )

    [42] => Array
        (
            [infoid] => 230
            [company_id] => 57
            [datum] => 2019
            [tid] => 327
            [catid] => 220
            [info_id] => 230
            [questionid] => 1138
            [cid] => 220
            [answer] => ok
        )

)
我想知道键
answer
的值
fout
每年分组多少次(
datum
包含年份,因此在这个数组中有两个年份2019年和2020年)

如何查看2019年和2020年的
fout
发生次数

例如,我看到:

2019 - 5 times fout
2020 - 0 times fout
我尝试在创建数组的循环中计数,但由于某些原因,它总是返回0

这是我以前尝试过的(开始):

但是
$counted
返回0

这是我目前的循环:

while($getwpi = $getwpicon->fetch_assoc()){
  $year = date('Y', strtotime($getwpi['datum']));
  $getwpi['datum'] = $year; // update your field
  $wpi[] = $getwpi; // add to the result array
}

您可以在循环中添加计数:

while($getwpi = $getwpicon->fetch_assoc()){
  $year = date('Y', strtotime($getwpi['datum']));
  $getwpi['datum'] = $year; // update your field

  if ($getwpi['answer'] == "fout") {
      $res[$year] = isset($res[$year]) ? $res[$year] + 1 : 1;
  }
  $wpi[] = $getwpi; // add to the result array
}

现在,
$res
将是一个每年计数的数组。您可以循环并打印所需内容。

您可以在循环中添加计数:

while($getwpi = $getwpicon->fetch_assoc()){
  $year = date('Y', strtotime($getwpi['datum']));
  $getwpi['datum'] = $year; // update your field

  if ($getwpi['answer'] == "fout") {
      $res[$year] = isset($res[$year]) ? $res[$year] + 1 : 1;
  }
  $wpi[] = $getwpi; // add to the result array
}
现在,
$res
将是一个每年计数的数组。您可以在上面循环并打印所需内容。

尝试以下代码:)

$(文档).ready(函数(e){
var theArray=数组({
infoid:1,
公司编号:1,
日期:2019年,
tid:“aziz elanzi”,
catid:“伊兰兹”,
回答:“fout”
},
{
infoid:1,
公司编号:1,
数据:2020年,
tid:“aziz elanzi”,
catid:“伊兰兹”,
回答:“fout”
},
{
infoid:1,
公司编号:1,
日期:2019年,
tid:“aziz elanzi”,
catid:“伊兰兹”,
回答:“好的”
},
{
infoid:1,
公司编号:1,
日期:2019年,
tid:“aziz elanzi”,
catid:“伊兰兹”,
回答:“fout”
},
{
infoid:1,
公司编号:1,
日期:2019年,
tid:“aziz elanzi”,
catid:“伊兰兹”,
回答:“fout”
},
{
infoid:1,
公司编号:1,
日期:2019年,
tid:“aziz elanzi”,
catid:“伊兰兹”,
回答:“fout”
},
{
infoid:1,
公司编号:1,
数据:2020年,
tid:“aziz elanzi”,
catid:“伊兰兹”,
回答:“fout”
});
var=0;
var count2020=0;
数组forEach(函数(数据){
如果(数据['answer']='fout'){
如果(数据['datum']==2019)计数2019+=1;
如果(数据['datum']==2020)count2020+=1;
}
}); 
警报('count2019:'+count2019+'-count2020:'+count2020');
});
试试这个代码:)

$(文档).ready(函数(e){
var theArray=数组({
infoid:1,
公司编号:1,
日期:2019年,
tid:“aziz elanzi”,
catid:“伊兰兹”,
回答:“fout”
},
{
infoid:1,
公司编号:1,
数据:2020年,
tid:“aziz elanzi”,
catid:“伊兰兹”,
回答:“fout”
},
{
infoid:1,
公司编号:1,
日期:2019年,
tid:“aziz elanzi”,
catid:“伊兰兹”,
回答:“好的”
},
{
infoid:1,
公司编号:1,
日期:2019年,
tid:“aziz elanzi”,
catid:“伊兰兹”,
回答:“fout”
},
{
infoid:1,
公司编号:1,
日期:2019年,
tid:“aziz elanzi”,
catid:“伊兰兹”,
回答:“fout”
},
{
infoid:1,
公司编号:1,
日期:2019年,
tid:“aziz elanzi”,
catid:“伊兰兹”,
回答:“fout”
},
{
infoid:1,
公司编号:1,
数据:2020年,
tid:“aziz elanzi”,
catid:“伊兰兹”,
回答:“fout”
});
var=0;
var count2020=0;
数组forEach(函数(数据){
如果(数据['answer']='fout'){
如果(数据['datum']==2019)计数2019+=1;
如果(数据['datum']==2020)count2020+=1;
}
}); 
警报('count2019:'+count2019+'-count2020:'+count2020');
});

您可以使用
array\u walk
array\u key\u exists
来实现此目的

$res=[];
array_walk($arr, function($v, $k) use (&$res){//$arr is the main array
  $res[$v['datum']] = (array_key_exists($v['datum'],$res) && !empty($v['answer'])) ? ($res[$v['datum']]+=1) : 1;
});
echo '<pre>';
print_r($res);

您可以使用
array\u walk
array\u key\u exists
来实现此目的

$res=[];
array_walk($arr, function($v, $k) use (&$res){//$arr is the main array
  $res[$v['datum']] = (array_key_exists($v['datum'],$res) && !empty($v['answer'])) ? ($res[$v['datum']]+=1) : 1;
});
echo '<pre>';
print_r($res);

首先,在收集这些数据的循环中进行计数是毫无意义的。可以在循环后计数,也可以在循环内的计数器变量中添加一些内容。如果您的唯一目标是按照要求获取计数,那么您可以在SQL中执行此操作,而不必在之后处理数据(与上一个问题的注释相同)。在收集此数据的循环内计数没有什么意义。可以在循环后计数,也可以在循环内的计数器变量中添加一些内容。如果您的唯一目标是按照要求获取计数,那么您可以在SQL中执行此操作,而不必在之后处理数据(与上一个问题的注释相同)。谢谢,但这一行打断了我的页面:
$res[$year]=isset($res[$year])?isset($res[$year]+1:1;
我在/home/website/public_html/rapport.php第59行得到了以下错误:
语法错误,意外的“:”,期望的“,”或“)”,我的坏-忘记了额外的
isset
-更新答案谢谢,但这一行正在破坏我的页面:
$res[$year]=isset($year])?isset($res[$year]+1:1;
我收到了这个错误:
语法错误,在/home/website/public_html/rapport.php的第59行中出现意外的“:”,预期的“,”或“)”
@twan-我的坏-忘记了额外的
isset
-更新答案