【问题标题】:Retrieving data from DB in PHP using foreach使用 foreach 从 PHP 中的数据库中检索数据
【发布时间】:2015-11-26 16:36:56
【问题描述】:

我有一个 sql 来选择与 user_id 匹配的所有行。然后我使用$dataFromDB = $stmtA->fetchAll();将其存储到一个数组中

Array
(
    [0] => Array
        (
            [0] => 55
            [1] => 7
            [2] => temperature
            [3] => 1
            [4] => 19
            [5] => 35
            [6] => 2015-11-26 14:41:34
        )
    [1] => Array
        (
            [0] => 56
            [1] => 7
            [2] => humidity
            [3] => 1
            [4] => 37
            [5] => 57
            [6] => 2015-11-26 14:42:36
        )
)

问题是这样使用 foreach:

foreach( $dataFromDB as $k => $row ){
    $json_response['SS'] = $row[2];
    $json_response['MN'] = $row[4];
    $json_response['MX'] = $row[5];
}

只得到:

[SS] => humidity
[MM] => 37
[MX] => 57

我想收到

[SS] => temperature, humidity
[MM] => 19, 37
[MX] => 35, 57

如何将 [0] 和 [1] 都存储到数组中然后显示它们?我认为问题出在 foreach 中,我的目标是保存到多维数组 [][] 中,例如,我可以使用 $json_response[1][1] 访问第二个数组的值(MM)和第二个值。

【问题讨论】:

    标签: php arrays foreach


    【解决方案1】:

    试试这样,

    $ss = $mn = $mx = "";
    foreach( $dataFromDB as $k => $row ){
        $ss .= $row[2];
        $mn .= $row[4];
        $mx .= $row[5];
    }
    
    $json_response['SS'] = rtrim($ss,",");
    $json_response['MN'] = rtrim($mn,",");
    $json_response['MX'] = rtrim($mx,",");
    

    您可以直接从数据库查询中获取数据,而不是循环它。 像这样的

    GROUP_CONCAT(table_name.column_name SEPARATOR ', ')
    

    并使用GROUP BY

    【讨论】:

    • 但是如果您可以直接从查询中获取逗号分隔值,则无需使用循环。
    • 谢谢,伙计,我将尝试更改查询以查看收到的内容。如果没有,我会尝试循环
    • 我会说,首先完成循环,然后尝试查询。
    • 如果有帮助,请考虑答案:)
    【解决方案2】:

    您当前正在覆盖这些值。而是将它们添加为单独的数组元素:

    //initialize with empty arrays
    $json_response=['SS'=>[], 'MN'=>[], 'MX'=>[]];
    
    foreach( $dataFromDB as $k => $row ){
        $json_response['SS'][] = $row[2];
        $json_response['MN'][] = $row[4];
        $json_response['MX'][] = $row[5];
    }
    

    这将生成您在上一段中提到的多维数组(而不是您在上面显示的逗号分隔值)。

    如果您想要逗号分隔的值,您可以在以下之后内爆数组:

    foreach($json_response as &$val)
        $val = implode(',', $val);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 2013-07-31
      • 1970-01-01
      • 2012-02-21
      • 2013-10-06
      • 2016-01-29
      • 1970-01-01
      相关资源
      最近更新 更多