首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在许多列中包含相同值的MYSQL行的PHP计数

在许多列中包含相同值的MYSQL行的PHP计数
EN

Stack Overflow用户
提问于 2016-01-25 14:50:57
回答 3查看 2.9K关注 0票数 2

这是我的桌子的内容:

如何计算不同表格单元格中的所有名称才能得到这样的结果?

  • 鲍伯-7
  • 亚历克斯-3
  • 伊凡-5
  • 尼娜-5 .

使用此代码:

代码语言:javascript
复制
<?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>';
    }

我的输出结果是:

  • 鲍伯-3
  • 亚历克斯-1
  • 伊凡-1
  • 尼娜-2

当我将代码更改为:

代码语言:javascript
复制
<?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=array($k1, $k2);
        $total_values = array_count_values($arr);
        foreach ($total_values as $key => $value) {
            echo $key .'-'. $value .'<br>';
        }
    }

我的输出结果是:

  • 鲍勃-1
  • 亚历克斯-1
  • 伊凡-1
  • 尼娜-1
  • 尼娜-1
  • 鲍勃-1
  • 鲍勃-1
  • 伊凡-1
  • 尼娜-1
  • 尼娜-1 .

在数组$k2中添加$k3....$k6和$arr有什么问题?

EN

回答 3

Stack Overflow用户

发布于 2016-01-25 15:01:17

这将计算单个名称的出现次数:

代码语言:javascript
复制
$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 />';
}

此解决方案的好处是只调用计数函数一次,而不是在每次迭代中调用一次。

票数 4
EN

Stack Overflow用户

发布于 2016-01-25 15:05:09

您必须在循环中积累数据,并在处理完所有数据后打印出来。

代码语言:javascript
复制
$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);
票数 -1
EN

Stack Overflow用户

发布于 2016-01-25 15:06:10

这段代码是经过测试的,应该可以做到这一点。

代码语言:javascript
复制
<?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);
} 
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34995456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档