【问题标题】:Looping array and adding, finding same ID's in all rows and columns循环数组并添加,在所有行和列中找到相同的 ID
【发布时间】:2019-05-07 11:52:59
【问题描述】:

循环数组并添加,在所有行和列中找到相同的 ID。

我的桌子

+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
| StdID | day1S1 | day1S2 | day1S3 | day2S1 | day2S2 | day2S3 | day3S1 | day3S2 | day3S3 |
+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|     3 | NULL   |      1 |      0 |      1 |      1 |      0 | NULL   |      1 |      1 |
|     4 | 1      |      1 |      0 |      1 |      0 |      0 | NULL   |      1 |      1 |
|     3 | 1      |      0 |      0 |      1 |      1 |      0 | 1      |      1 |      1 |
|     3 | NULL   |      1 |      0 |      1 |      1 |      0 | NULL   |      0 |      0 |
|     4 | 0      |      1 |      1 |      1 |      1 |      0 | NULL   |      0 |      0 |
+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+

我正在使用以下代码

$stu_leave          = "SELECT * FROM tblname WHERE StdID = '3' ";
$stu_leave_result   = $conn->query($stu_leave);

while($stu_leave_result_fetch   = $stu_leave_result->fetch_assoc()) 
{
    $array = array("$day1S1","$day1S2","$day1S3","$day2S1","$day2S2","$day2S3","$day3S1","$day3S2","$day3S3");

    $counts = array_count_values($array);
    echo $counts['1']."<br>";
    echo $counts['0'];
}

这是我的输出

5 6 3 
2 3 4

我想得到结果

14 (add all 5 + 6 + 3).
9

请帮帮我。

【问题讨论】:

  • 我不清楚你想要实现什么。你能详细介绍一下吗?
  • $day1S1 和所有其他变量从何而来?

标签: php mysql arrays


【解决方案1】:

您可以使用 array_walk、array_count_values 和 array_sum 来实现您的要求

$result = [];
array_walk($a, function ($item) use (&$result) {
    $item = array_filter($item, function ($var) {
        // removing null values
        return ($var !== null);
    });
    $result[] = array_count_values($item);
});

echo array_sum(array_column($result, 1))."<br/>";
echo array_sum(array_column($result, 0));

array_sum — 计算数组中值的总和
array_walk — 将用户提供的函数应用于数组的每个成员
array_column — 从输入中的单个列返回值array
array_filter — 使用回调函数过滤数组元素

输出

14
9

工作demo

编辑

映射到您的代码,

$result = [];
while($stu_leave_result_fetch   = $stu_leave_result->fetch_assoc()) 
{
    $array = array("$day1S1","$day1S2","$day1S3","$day2S1","$day2S2","$day2S3","$day3S1","$day3S2","$day3S3");
    $array = array_filter($array, function ($var) {
        // fetching null values
        return ($var !== null);
    });
    $result[] = array_count_values($array);
});
echo array_sum(array_column($result, 1))."<br/>";
echo array_sum(array_column($result, 0));

【讨论】:

  • 非常感谢拉胡尔。我从今天早上开始尝试这个。十分感谢。完美
  • 乐于助人。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。
  • 你的就是我要求的。谢谢。
【解决方案2】:

只需使用array_sum() 将值相加即可。

while ($stu_leave_result_fetch = $stu_leave_result->fetch_assoc()) {
    $counts = array_count_values($array);
    $sum = array_sum($counts);
    echo $sum."<br />\n";
}

【讨论】:

  • 非常感谢您的快速回答。当我使用此代码时,它会显示所有行的总和,即 14 9 三次。有机会拆分吗?
  • 这意味着你循环它三遍。您可能希望在查询中使用 GROUP BY
【解决方案3】:

首先,如果你只查询你真正感兴趣的列,那么获取的数组将只包含你想要求和的数据。

然后您可以在返回的行上执行一个简单的array_sum(),使代码更简单、更易于阅读。

$sql    = "SELECT day1S1, day1S2, day1S3, day2S1, 
                  day2S2, day2S3, day3S1, day3S2, day3S3 
            FROM tblname 
            WHERE StdID = '3'";
$result = $conn->query($sql);

while($row = $result->fetch_assoc()) 
{

    echo array_sum($row) . '<br>';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多