-1

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

4 回答 4

2

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

演示

$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);
于 2013-01-04T10:31:47.967 回答
1
$result = array();
foreach ($array_from_mysql as $sub_array) {
    $result['total'][] = $sub_array['total'];
    $result['tanggal_laporan'][] = $sub_array['tanggal_laporan'];
}
于 2013-01-04T10:31:00.310 回答
1

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

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

希望有帮助。

于 2013-01-04T10:32:46.470 回答
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;
        }
    }
?>
于 2013-01-04T10:30:46.593 回答