1

次のようなクエリがあります。

select truck, oil_type, km_min, km_max from trucks;

私は codeigniter と$query->result_array()関数を使用しているので、この構造の連想配列にロードされます:

/*

array(
    truck
    oil_type
    km_min
    km_max
)

*/

$arr[0]["truck"]     = 2;
$arr[0]["oil_type"] = 2;
$arr[0]["km_min"]    = 345;
$arr[0]["km_max"]   = 567;
$arr[1]["truck"]     = 2;
$arr[1]["oil_type"] = 4;
$arr[1]["km_min"]    = 234;
$arr[1]["km_max"]    = 867;
$arr[2]["truck"]     = 1;
$arr[2]["oil_type"] = 2;
$arr[2]["km_min"]    = 545;
$arr[2]["km_max"]    = 867;
$arr[3]["truck"]     = 4;
$arr[3]["oil_type"] = 3;
$arr[3]["km_min"]    = 45;
$arr[3]["km_max"]    = 567; 

次に、次のようにトラックを ID でグループ化して再構築しようとしています。

/*

trucks - array(
    truck
    truck_data - array(
        oil_type
        km_min
        km_max
    )
)

*/

$arr["truck"][0]= 2;
$arr["truck"][0]["truck_data"][0]["oil_type"] = 2;
$arr["truck"][0]["truck_data"][0]["km_min"]   = 345;
$arr["truck"][0]["truck_data"][0]["km_max"]   = 567;
$arr["truck"][0]["truck_data"][1]["oil_type"] = 4;
$arr["truck"][0]["truck_data"][1]["km_min"]   = 234;
$arr["truck"][0]["truck_data"][1]["km_max"]   = 867;
$arr["truck"][1]= 1;
$arr["truck"][1]["truck_data"][0]["oil_type"] = 2;
$arr["truck"][1]["truck_data"][0]["km_min"]   = 545;
$arr["truck"][1]["truck_data"][0]["km_max"]   = 867;
$arr["truck"][2]= 4;
$arr["truck"][2]["truck_data"][0]["oil_type"] = 3;
$arr["truck"][2]["truck_data"][0]["km_min"]   = 45;
$arr["truck"][2]["truck_data"][0]["km_max"]   = 567;       

私は以下のコードのようなもので考えました:

$res = $query->result_array();
$cnt_total = count($res);
$y = 0;

for ($x=0; $x < $cnt_total -1 ; $x++) { 

    $truck  = $res[$x]["truck"];
    $trucks["truck"][$y] = $truck;

    $q = $x + 1;
    $i = 0;

    do{
        $trucks[$y][$i]["oil_type"] = $res[$q]["oil_type"];
        $trucks[$y][$i]["km_min"]   = $res[$q]["km_max"];
        $trucks[$y][$i]["km_max"]   = $res[$q]["km_max"];

        $q++;
        $i++;
        if ($q <= $cnt_total) break;
    } while (  $truck === $res["truck"][$q] );

    $y++;

}

しかし、正しく動作しません...私は解決策から遠すぎますか? パフォーマンス この特定のケースでは、私にとって重要です。

あなたが試すことができるphpfiddleがあります: http://phpfiddle.org/main/code/67j-ui5

アイデア、ヒント、アドバイスをいただければ幸いです。さらに情報が必要な場合はお知らせください。投稿を編集します。

4

3 に答える 3

1

これを試して:

$res = $query->result_array();

$trucks = array();
foreach ($res as $row) { 
    $truck["truck"]  = $row["truck"];
    $truck["truck_data"] = array(
        'oil_type'  => $row["oil_type"],
        'km_min'    => $row["km_min"],
        'km_max'    => $row["km_max"],
    );
    $trucks[] = $truck;
}

var_dump($trucks);
于 2013-10-22T00:23:25.757 に答える
0

これはあなたが必要とするものですか?変換結果は $result に格納されます

$result = array();
foreach($query->result_array() as $truck)
{
    $new_truck = array();
    $new_truck['truck'] = $truck['truck'];
    $new_truck['truck_data'] = array();
    $new_truck['truck_data']['oil_type'] = $truck['oil_type'];
    $new_truck['truck_data']['km_min'] = $truck['km_min'];
    $new_truck['truck_data']['km_max'] = $truck['km_max'];
    array_push($result, $new_truck);
}
于 2013-10-22T00:23:32.957 に答える