【PHP】统计问卷调查结果的选项票数和百分比
遇到问题:
有以下数组,每一条记录是用户的每一条问卷题目的回答情况,q_id是问题id,o_id是选项id。需要统计每一个选项被选择的次数和每个选项占该问题的百分比。如问题1的选项有A和B,一个用户选择了A之后,则问题1A选项是1票占比100%,问题1B选项是0票占比0%。
array(49) {
[0] => array(2) {
["q_id"] => string(2) "57"
["o_id"] => string(3) "125"
}
[1] => array(2) {
["q_id"] => string(2) "58"
["o_id"] => string(3) "129"
}
[2] => array(2) {
["q_id"] => string(2) "59"
["o_id"] => string(3) "131"
}
[3] => array(2) {
["q_id"] => string(2) "65"
["o_id"] => string(3) "145"
}
[4] => array(2) {
["q_id"] => string(2) "57"
["o_id"] => string(3) "126"
}
[5] => array(2) {
["q_id"] => string(2) "58"
["o_id"] => string(3) "130"
}
}
解决方法:
需要用到array_count_values()函数,详情可参考http://www.w3school.com.cn/php/func_array_count_values.asp
$oCount = array_count_values(array_column($aList,'o_id'));//统计选项
$qCount = array_count_values(array_column($aList,'q_id'));//统计该问题总共选项
$oCount数组如下,记录每个选项被选择次数。
array(18) {
[125] => int(3)
[129] => int(1)
[131] => int(3)
[145] => int(3)
[126] => int(2)
[130] => int(6)
}
$qCount数组如下,记录每道题下面的被回答次数。
array(8) {
[57] => int(9)
[58] => int(7)
[59] => int(6)
[65] => int(7)
[64] => int(5)
[66] => int(5)
[67] => int(5)
[68] => int(5)
}
然后需要联系到每个选项的父id,即问题id
foreach ($oCount as $k => $v){
//$q_id为该选项所属的问题id
$q_id = M('h1_answer as a')
-> join('by_h1_option as o on o.id = a.o_id')
-> where('o.id='.$k)
-> getField('q_id');
$count[$k] = [
'num' => $v,//票数
'persent' => round($v/$qCount[$q_id]*100,2)//统计百分比
];
}
打印结果,就可以得到每个选项的票数和占题目百分比了
[125] => array(2) {
["num"] => int(3)
["persent"] => float(33.33)
}
[129] => array(2) {
["num"] => int(1)
["persent"] => float(14.29)
}
[131] => array(2) {
["num"] => int(3)
["persent"] => float(50)
}
[145] => array(2) {
["num"] => int(3)
["persent"] => float(42.86)
}
[126] => array(2) {
["num"] => int(2)
["persent"] => float(22.22)
}
[130] => array(2) {
["num"] => int(6)
["persent"] => float(85.71)
}
【PHP】统计问卷调查结果的选项票数和百分比的更多相关文章
- 简历生成平台项目开发-STEP2问卷调查结果统计分析
根据之前设计的调查问卷,截止目前为止,一共收到64份问卷结果.一共16题,分别从基本信息.是否对简历制作有需要.对产品期望的特点和建议采纳四个方面设计问题.下面逐题分析问卷结果: 1.您的性别 可以看 ...
- 《关于长沙.NET技术社区未来发展规划》问卷调查结果公布
那些开发者们对于社区的美好期待 2月,长沙.net 技术社区自从把群拉起来开始,做了一次比较正式.题目为<关于长沙.NET技术社区未来发展规划>的问卷调查,在问卷调查中,溪源写道: 随着互 ...
- 【软件工程1916|W(福州大学)_助教博客】2019年上学期期末问卷调查结果公示
1.调查问卷概况 福州大学2019W班,收集到有效答卷44份 2. 调查问卷情况 Q1:请问你平均每周在课程上花费多少小时? 去除自估水平超过40小时的,平均16.6H Q2.软工实践的各次作业分别花 ...
- 转载:性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项
这段时间AX查询变得非常慢,每天都有很多锁. 最后发现是数据库统计信息需要更新. ----------------------------------------------------------- ...
- 性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项
原文:性能优化--统计信息--SQLServer自动更新和自动创建统计信息选项 原文译自:http://www.mssqltips.com/sqlservertip/2766/sql-server-a ...
- 如何用excel统计调查问卷
如何用excel统计调查问卷 有些人可能经常要对调查问卷进行统计,使用手写的方法(就是在纸上写正字的方法)虽然很方便,不过不方便在一定条件下进行统计,如在男士的条件下,使用诺基亚的手机有多少人.而用e ...
- shell 统计某个文件的行数命令
语法:wc [选项] 文件- 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...
- Linux统计文件行数
语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...
- wc命令--Linux统计文件行数
语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...
随机推荐
- .NET开源工作流RoadFlow-流程运行-菜单配置
经过流程设计和表单设计后,一个流程就设置完成了,下面说说怎么让设计好的流程运行起来吧. 流程和表单设计完成发布后都在应用程序库里,我们只要将流程在角色应用中配置给相应的用户即可让流程选择了. 在系统管 ...
- Linux c获取时间
linux c获得时间和设置时间 #include<time.h> //C语言的头文件 #include<stdio.h> //C语言的I/O void main() { ti ...
- 检查你要加入到gradle的第三方library是否是最新版本
开发者从博客.github readme 或者 官方文档中找到如何在gradle 文件中加入dependency 的时候,往往版本已经比较老旧了,想要找到最新版,介绍一个利器 http://gra ...
- XP无法访问SharePoint 2010的问题
最近用户反馈XP系统的电脑无法访问SharePoint 2010系统,换成了火狐浏览器后可以正常访问,但是在上传附件时出现异常,支持人员给的解决方案是换操作系统,要换成win7. 但是因为工作原因,不 ...
- 架构蓝图--软件架构 "4+1" 视图模型
引言 我们已经看到在许多文章和书籍中,作者欲使用单张视图来捕捉所有的系统架构要点.通过仔细地观察这 些图例中的方框和箭头,不难发现作者努力地在单一视图中表达超过其表达限度的蓝图.方框是代表运行的程序吗 ...
- C# 轻松读取、改变文件的创建、修改、访问时间 z
// 读取文件的创建.修改.访问时间FileInfo fi = new FileInfo("C://test.txt");Console.WriteLine(fi.Creation ...
- ring0 关于SSDTHook使用的绕过页面写保护的原理与实现
原博:http://www.cnblogs.com/hongfei/archive/2013/06/18/3142162.html 为了安全起见,Windows XP及其以后的系统将一些重要的内存页设 ...
- python入门4 python查看数据类型及类型转换
查看数据类型:type() 类型转换:int(),float(),char(),ord(),str(),bool() #coding:utf-8 #/usr/bin/python "&quo ...
- WP模拟器修改语言为中文方法
对于WP7模拟器来说默认启动时显示的语言为英文,除了操作界面外,如果你的应用支持多国语言必须修改为中文才能显示正确的界面.下面Zune123将WP7 Emulator修改语言为中文的方法写个简单的教程 ...
- GraphQL 到底怎么用?看看这个例子就知道了
转载自: https://www.infoq.cn/article/i5JMm54_aWrRZcem1VgH