2011-02-25 14 views
0

多次元配列にmysqlデータをフェッチする最良の方法は何ですか?多次元配列をデータレイアウトに使用しますか?

SQL:

SELECT tariff, monthly_cost, point, phones.name FROM phoneplanpoint 
LEFT JOIN phones on phoneplanpoint.phone_id = phones.phone_id 
LEFT JOIN price_plans on price_plans.priceplan_id = phoneplanpoint.priceplan_id 

出力:

tariff monthly_cost point name 
Matrix 15.00   6.0 Blackberry 
Matrix 20.00   10.0 Blackberry 
Lion 15.00   12.5 Blackberry 
Lion 20.00   14.5 Blackberry 
Matrix 15.00   6.5 Iphone 
Matrix 20.00   7.5 Iphone 

私は出力データにレイアウトビューのために準備しやすくなりますので、多次元配列にすることを置くデータを、しようとしています。

これはテストの簡単な例ですが、これは正しい方法ですか?もちろん私はループを使用します。

$Priceplan['Blackberry'] = array(); 
$Priceplan['Blackberry']['tariff'][] = array("Name" => "Matrix 15.00", "Point" => "6.0"); 
$Priceplan['Blackberry']['tariff'][] = array("Name" => "Matrix 20.00", "Point" => "10.0"); 

は、私は、ビューのレイアウトデータは次のようになりたい:

enter image description here

答えて

1

あなたのクエリによって返されたデータは次のようにフォーマットされていることを仮定して行くを取得する必要があります以下:

$data = array(
    array(
     'tariff' => 'Matrix', 
     'monthly_cost' => '15.00', 
     'point' => '6.0', 
     'name' => 'Blackberry' 
    ), 
    array(
     'tariff' => 'Matrix', 
     'monthly_cost' => '20.00', 
     'point' => '10.0', 
     'name' => 'Blackberry' 
    ), 
    array(
     'tariff' => 'Lion', 
     'monthly_cost' => '15.00', 
     'point' => '12.5', 
     'name' => 'Blackberry' 
    ), 
    array(
     'tariff' => 'Lion', 
     'monthly_cost' => '20.00', 
     'point' => '14.5', 
     'name' => 'Blackberry' 
    ), 
    array(
     'tariff' => 'Matrix', 
     'monthly_cost' => '15.00', 
     'point' => '6.5', 
     'name' => 'Iphone' 
    ), 
    array(
     'tariff' => 'Matrix', 
     'monthly_cost' => '20.00', 
     'point' => '7.5', 
     'name' => 'Iphone' 
    ) 
); 

これを行うには良い方法があるかもしれませんが、少なくとも最初は

foreach ($data as $plan) { 
    if (!isset($output[$plan['name']])) { 
     $output[$plan['name']] = array(); 
    } 

    $options = array(
     'name' => $plan['tariff'], 
     'price' => $plan['monthly_cost'], 
     'point' => $plan['point'] 
    ); 

    $output[$plan['name']][] = $options; 
} 

var_dump($output); 

どの出力すること

array(2) { 
    ["Blackberry"] => array(4) { 
    [0] => array(3) { 
     ["name"] => string(6) "Matrix" 
     ["price"] => string(5) "15.00" 
     ["point"] => string(3) "6.0" 
    } 
    [1] => array(3) { 
     ["name"] => string(6) "Matrix" 
     ["price"] => string(5) "20.00" 
     ["point"] => string(4) "10.0" 
    } 
    [2] => array(3) { 
     ["name"] => string(4) "Lion" 
     ["price"] => string(5) "15.00" 
     ["point"] => string(4) "12.5" 
    } 
    [3] => array(3) { 
     ["name"] => string(4) "Lion" 
     ["price"] => string(5) "20.00" 
     ["point"] => string(4) "14.5" 
    } 
    } 
    ["Iphone"] => array(2) { 
    [0] => array(3) { 
     ["name"] => string(6) "Matrix" 
     ["price"] => string(5) "15.00" 
     ["point"] => string(3) "6.5" 
    } 
    [1] => array(3) { 
     ["name"] => string(6) "Matrix" 
     ["price"] => string(5) "20.00" 
     ["point"] => string(3) "7.5" 
    } 
    } 
} 

そして、あなたはそれがうまく機能していることを確認したい場合は、最終的に、携帯電話の名前と関税上の(クエリに順に追加してくださいのようなあなたのデータ)。このコードは重複を処理しません。このコードをちょっと詰めたいなら、array_uniqueで完了し、SORT_REGULAR optionnalパラメーターを必ず使用してください。