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

そして、テーブル編成のもう1つの行、たとえばname = orgthreeの1つの行が来ると、次のようになります。

$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が巧妙な処理を行うことなく、必要な形式のデータをDBから取得できます。

元のクエリを表示していないため、実際のクエリでそれ以上のことはできませんが、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 に答える