PHP计算在许多列中包含相同值的MYSQL行
以下是我表格的内容: 如何计算不同表单元格中的所有名称以得到这样的结果PHP计算在许多列中包含相同值的MYSQL行,php,mysql,Php,Mysql,以下是我表格的内容: 如何计算不同表单元格中的所有名称以得到这样的结果 鲍勃-7 亚历克斯-3 伊万-5 尼娜-5 使用此代码: <?php $q= mysqli_query($db, 'SELECT * FROM names'); while ($all = mysqli_fetch_array($q)) { $k1= $all['Name1']; $k2= $all['Name2']; $k3= $all['Name3']
- 鲍勃-7
- 亚历克斯-3
- 伊万-5
- 尼娜-5
<?php
$q= mysqli_query($db, 'SELECT * FROM names');
while ($all = mysqli_fetch_array($q)) {
$k1= $all['Name1'];
$k2= $all['Name2'];
$k3= $all['Name3'];
$k4= $all['Name4'];
$k5= $all['Name5'];
$k6= $all['Name6'];
$arr[]= $k1;
$total_values = array_count_values($arr);
}
foreach ($total_values as $key => $value) {
echo $key .'-'. $value .'<br>';
}
这将计算单个名称的出现次数:
$q= mysqli_query($db, 'SELECT * FROM names');
$arr = array();
// 1) loop through rows
while ($all = mysqli_fetch_array($q, MYSQLI_NUM)) {
// 2) loop through cells in a row
foreach($all as $val) {
// 3) 'roll out' the values into a one-dimensional array
if(empty($val)) { continue; } // if you don't want to count empty cells
$arr[] = $val;
}
}
// 4) count the number of occurences
$names_qty = array_count_values($arr);
// optional loop that shows the results
foreach($names_qty as $name=>$qty) {
echo $name.'-'.$qty.'<br />';
}
$q=mysqli_查询($db,'SELECT*FROM names');
$arr=array();
//1)循环行
而($all=mysqli\u fetch\u数组($q,mysqli\u NUM)){
//2)循环一行中的单元格
foreach($val){
//3)“展开”值到一维数组中
if(empty($val)){continue;}//如果不想计数空单元格
$arr[]=$val;
}
}
//4)统计发生的次数
$names\u qty=数组\u计数\u值($arr);
//显示结果的可选循环
foreach($name\u数量为$name=>$qty){
回显$name.'-'.$qty.
;
}
此解决方案的好处是,您只需调用一次计数函数,而不是在每次迭代中调用。您必须在循环中累积数据,并在处理完所有数据后将其打印出来
$total = array();
$result = mysqli_query($db, 'SELECT * FROM names', MYSQLI_USE_RESULT);
while (mysqli_fetch_assoc($result) as $row) {
foreach ($row as $col => $value)
total[$col]++;
}
}
print_r($total);
这段代码已经过测试,应该可以做到这一点
<?php
$arr = array();
$q = mysqli_query($db, 'SELECT * FROM names');
while ($all = mysqli_fetch_assoc($q)) {
foreach($all as $val) {
if(empty($val)) {
continue;
}
// saves all names with the name as key
$arr[$val][] = $val;
}
}
// Output
foreach($arr as $k => $v) {
// count how many times the name was pushed into the array
echo $k.' - '. count($v);
}
听起来像是一个很好的使用案例。如果你在查询中做了繁重的工作,你就不必用PHP做很多操作了。为什么OP要“尝试这个”?尤其是当你承认这是未经测试!一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客,以便他们可以找到这个问题并阅读你的答案。问题在哪里?是的,它是经过测试的。它是可行的,但是代码将名称的数量增加了一倍(在名称之后)!为了防止名称的双重编号,我将mysqli_fetch_数组更改为mysqli_fetch_assoc,代码运行得非常完美!我更新了你的帖子!我已经更新了我的答案。如果你投票支持这个答案,那就太好了为什么OP要“试试这个”?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客,以便他们可以找到这个问题并阅读你的答案。代码会使名字的数字(名字之后)翻一番@BorislavRazvanski感谢您发现这一点!这是因为mysqli\u fetch\u array
同时返回了数字键和字符串键,因此每行中的单元格数量增加了一倍。在向该函数添加第二个参数后,一切正常。是的,现在可以工作了!但是,在您在函数中添加第二个参数之前,我使用mysqli\u fetch\u assoc而不是mysqli\u fetch\u数组,它可以正常工作!多谢各位@BorislavRazvanski太好了,不客气。这两种功能都可以使用。如果我的回答对你有帮助,请考虑接受。谢谢:)。
<?php
$arr = array();
$q = mysqli_query($db, 'SELECT * FROM names');
while ($all = mysqli_fetch_assoc($q)) {
foreach($all as $val) {
if(empty($val)) {
continue;
}
// saves all names with the name as key
$arr[$val][] = $val;
}
}
// Output
foreach($arr as $k => $v) {
// count how many times the name was pushed into the array
echo $k.' - '. count($v);
}