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
-更新答案