遇到问题:

有以下数组,每一条记录是用户的每一条问卷题目的回答情况,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】统计问卷调查结果的选项票数和百分比的更多相关文章

  1. 简历生成平台项目开发-STEP2问卷调查结果统计分析

    根据之前设计的调查问卷,截止目前为止,一共收到64份问卷结果.一共16题,分别从基本信息.是否对简历制作有需要.对产品期望的特点和建议采纳四个方面设计问题.下面逐题分析问卷结果: 1.您的性别 可以看 ...

  2. 《关于长沙.NET技术社区未来发展规划》问卷调查结果公布

    那些开发者们对于社区的美好期待 2月,长沙.net 技术社区自从把群拉起来开始,做了一次比较正式.题目为<关于长沙.NET技术社区未来发展规划>的问卷调查,在问卷调查中,溪源写道: 随着互 ...

  3. 【软件工程1916|W(福州大学)_助教博客】2019年上学期期末问卷调查结果公示

    1.调查问卷概况 福州大学2019W班,收集到有效答卷44份 2. 调查问卷情况 Q1:请问你平均每周在课程上花费多少小时? 去除自估水平超过40小时的,平均16.6H Q2.软工实践的各次作业分别花 ...

  4. 转载:性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项

    这段时间AX查询变得非常慢,每天都有很多锁. 最后发现是数据库统计信息需要更新. ----------------------------------------------------------- ...

  5. 性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项

    原文:性能优化--统计信息--SQLServer自动更新和自动创建统计信息选项 原文译自:http://www.mssqltips.com/sqlservertip/2766/sql-server-a ...

  6. 如何用excel统计调查问卷

    如何用excel统计调查问卷 有些人可能经常要对调查问卷进行统计,使用手写的方法(就是在纸上写正字的方法)虽然很方便,不过不方便在一定条件下进行统计,如在男士的条件下,使用诺基亚的手机有多少人.而用e ...

  7. shell 统计某个文件的行数命令

    语法:wc [选项] 文件- 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...

  8. Linux统计文件行数

    语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...

  9. wc命令--Linux统计文件行数

    语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...

随机推荐

  1. Oracle数据库错误消息

    Oracle数据库错误消息 导出错误消息 l EXP-00000导出终止失败 原因:导出时产生Oracle错误. 操作:检查相应的Oracle错误消息. l EXP-00001数据域被截断 - 列长度 ...

  2. 【Linux】 静态函数库设计

    一.外部函数来源-- 函数库&系统调用 二.函数库分类 静态函数库 --多份拷贝 动态函数库 --单份拷贝 区别 链接方式区别 三.函数库存放位置 Linux应用程序使用的主要函数库均存放于/ ...

  3. Div+Css布局教程(-)CSS必备知识

    目录: 1.Div+Css布局教程(-)CSS必备知识 注:本教程要求对html和css有基础了解. 一.CSS布局属性 Width:设置对象的宽度(width:45px). Height:设置对象的 ...

  4. C++异常安全的思考

    异常安全的代码是指,满足两个条件 1异常中立性 : 是指当你的代码(包括你调用的代码)引发异常时,这个异常 能保持原样传递到外层调用代码 2.异常安全性:  1,抛出异常后,资源不泄露, 2,抛出异常 ...

  5. Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? 线程的sleep()方法和yield()方法有什么区别?

    Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的时间 ...

  6. Win8 Pro 64 Install .net3.5 在线升级会遇到错误0x800F0906。

    很多人安装Win8后都遇到了无法升级.NET Framework 3.5.1的问题,在线升级会遇到错误0x800F0906. Uninstall Windows update kB: KB296682 ...

  7. C++ 数据库 char 转 wchar_t SQLWCHAR

    C++中对数据库的操作感觉太复杂了,不如C#好使,但最近出于某些原因还是学习了一下C++下操作数据库的方法. 如果要想用C++实现对数据库的操作其实很简单,但是如果你需要动态的操作数据库(比如获得用户 ...

  8. 在同一网关下ping不通其他电脑

    最近在做数据库相关的程序,所以想先用ping试下和主机连没连着,但发现虽然两台电脑在同一网关下,但却互相ping不通,后来才发现,原来是防火墙在作怪. Omg!感慨一下!默认的情况下,保守的windo ...

  9. c#类的练习

    类部分练习题 - dijiaxing1234的博客 - CSDN博客  https://blog.csdn.net/dijiaxing1234/article/details/81230811 真好啊

  10. 【洛谷P4124】[CQOI2016]手机号码

    手机号码 数位DP模板题 记忆化搜索: #include<iostream> #include<cstring> #include<cstdio> using na ...