PHP:如何将foreach中的数组转换为foreach

时间:2013-01-04 10:28:32

标签: php mysql codeigniter foreach

我有自动查询,我使用代码点火器, 结构表组织具有字段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);

在表中,我们希望使用字段 id,total,tanggal_laporan,org_id 搜索结果 laporan

 $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",
);

当它来到表组织的另一行时,例如一行名为= 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",
);

感谢。

4 个答案:

答案 0 :(得分:2)

更改问题后更新了答案。这将把字段处理成你想要的结构,而不必对字段名称进行硬编码。

<强> 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);

答案 1 :(得分:1)

$result = array();
foreach ($array_from_mysql as $sub_array) {
    $result['total'][] = $sub_array['total'];
    $result['tanggal_laporan'][] = $sub_array['tanggal_laporan'];
}

答案 2 :(得分:1)

如果它来自SQL查询(如变量名所示),您可以使用GROUP BY查询GROUP_CONCAT来获取数据库中所需格式的数据,而无需PHP做任何聪明的事。

我对实际查询的帮助远不止于此,因为您没有向我们展示原始查询,但请在MySQL手册上阅读更多相关内容:http://dev.mysql.com/doc/refman/5.0/en//group-by-functions.html

希望有所帮助。

答案 3 :(得分:0)

这应该有效:

<?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;
        }
    }
?>