【问题标题】:PHP: How to get array in foreach to out foreachPHP:如何在 foreach 中获取数组以输出 foreach
【发布时间】:2012-12-18 18:50:42
【问题描述】:

我有自动查询,我使用代码点火器, 结构表组织有字段id和名称。

 $get_organization = $this->db->query("SELECT id,name FROM organization")->result_array();

如果我 print_r 变量 $get_organization 如下:

    Array (
         [0] => Array
          ( 
             [id] => 1
             [name] => orgone
          )

         [1] => Array
          (
             [id] => 2
             [name] => orgtwo
          )
   )

为了我得到自动总和,我编写如下代码:

 foreach($get_organization as $bit){
     $id=$bit['id'];
     $name=preg_replace("/[^a-zA-Z0-9\-]/", "", $bit['name']);
     $getcabang[] = "SUM(CASE WHEN org_id = '$id' THEN total END) as $name";     
 }

 $cabang = implode(',',$getcabang);

并且在表中寻找搜索结果是 laporan 字段 id, total, tanggal_laporan, org_id。

 $query = $this->db->query("SELECT id, $cabang, tanggal_laporan FROM laporan GROUP BY tanggal_laporan")->result_array();

然后如果我 print_r 变量 $query 我得到如下结果:

Array (
     [0] => Array
      ( 
         [orgone] => 218000
         [orgtwo] => 112000
         [tanggal_laporan] => 2012-11-04
      )

     [1] => Array
      (
         [orgone] => 198000
         [orgtwo] => 411000
         [tanggal_laporan] => 2012-11-05
      )

     [2] => Array
      (
         [orgone] => 513000
         [orgtwo] => 147000 
         [tanggal_laporan] => 2012-11-06
      )
 )

所以我的问题是,我想自动生成如下结果:

$array_transform = array(
   [orgone] => "218000, 198000, 411000",
   [orgtwo] => "112000, 411000, 147000",
   [tanggal_laporan] => "2012-11-04, 2012-11-05, 2012-11-06",
);

当涉及到表格组织的另一行时,例如一行 name=orgthree,所以我想要的结果为:

$array_transform = array(
   [orgone] => "218000, 198000, 411000",
   [orgtwo] => "112000, 411000, 147000",
   [orgthree] => "0, 0, 0",
   [tanggal_laporan] => "2012-11-04, 2012-11-05, 2012-11-06",
);

谢谢。

【问题讨论】:

    标签: php mysql codeigniter foreach


    【解决方案1】:

    问题更改后更新的答案。这会将字段处理成您想要的结构,而无需对字段名称进行硬编码。

    Demo

    $array_transform = array();
    
    foreach($array_from_mysql as $row)
    {
        foreach($row as $field => $value)
        {
            if(isset($array_transform[$field]))
            {
                $array_transform[$field][] = $value;
            }
            else
            {
                $array_transform[$field] = array($value);
            }
        }
    }
    
    print_r($array_transform);
    

    【讨论】:

    • 嗨 MrCode 感谢您的回复,很抱歉,但不是那样,但我问错了问题,现在我已经改变了我的问题,请您看看新的问题。谢谢。
    • 嗨 MrCode,感谢您的代码它可以工作,但我不能在那里内爆价值:-D
    • 什么/为什么你试图内爆?
    • 对不起,打扰了,我要自动数据。结果我只想要我的改变,谢谢。
    【解决方案2】:

    这应该可行:

    <?php
        $array_transform = array();
        foreach ($array_from_mysql as $row) {
            foreach ($row as $name => $value) {
                if (!isset($array_transform[$name])) {
                    $array_transform[$name] = array();
                }
                $array_transform[$name][] = $value;
            }
        }
    ?>
    

    【讨论】:

    • 嗨 h20000000 感谢您的回复,很抱歉,但不是那样,但我问错了问题,现在我已经改变了我的问题,请您看看新的问题。谢谢。
    • @AlanIchal 我已更改代码以使用任意数量的键。
    • 嗨,h2ooooo,感谢您的代码,它可以工作,但我不能在那里内爆价值:-D
    • @AlanIchal 就用implode(", ", $array_transform["orgone"]); ?
    • 对不起,打扰了,我要自动数据。结果我只想要我的改变,谢谢。
    【解决方案3】:

    如果它来自 SQL 查询(如变量名所暗示的那样),您可能可以使用带有 GROUP_CONCAT 的 GROUP BY 查询从数据库中获取所需格式的数据,而 PHP 不需要做任何聪明的事情.

    对于实际查询,我无能为力,因为您没有向我们展示原始查询,但请在此处的 MySQL 手册中阅读更多信息:http://dev.mysql.com/doc/refman/5.0/en//group-by-functions.html

    希望对您有所帮助。

    【讨论】:

    • 嗨 SDC 感谢您的回复,但我在组 concat 上没有成功,我使用代码点火器,在代码点火器中,在代码点火器中无法运行查询函数 group_concat,我收到消息致命错误:调用未定义的方法CI_DB_mysql_driver::group_concat()。
    • 我不知道 Code Igniter DB 类,所以我对此无能为力,但如果没有某种方法可以使用它进行这种查询,我会感到非常惊讶 - - 一个不错的数据库引擎不应该阻止您执行常见的 SQL 函数。
    • 好的,所以从那个foreach或如何获取数据作为我上面的问题,因为CI和PHP对于数组问题是相同的。你试着回头看看我改过的代码,我也提供结果数据,让这里的朋友可以帮我用PHP代码来操作数组。谢谢。
    【解决方案4】:
    $result = array();
    foreach ($array_from_mysql as $sub_array) {
        $result['total'][] = $sub_array['total'];
        $result['tanggal_laporan'][] = $sub_array['tanggal_laporan'];
    }
    

    【讨论】:

    • 嗨 t1gor 感谢您的回复,很抱歉,但不是那样,但我问错了问题,现在我已经改变了我的问题,请您看看新的问题。谢谢。
    猜你喜欢
    • 2011-02-11
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2019-07-03
    • 2016-02-14
    • 1970-01-01
    相关资源
    最近更新 更多