2017-02-22 1 views
1

データベースクエリから作成した配列で、新しい関数を実行するために必要なすべてのデータを持っている配列createList()構造が便利です。私は現在、この配列のデータを再構築する価値があるのか​​、それとも単にデータベースに新しいクエリを実行するのかという疑問を抱いています。この過程で、元の配列からcreateList()関数に適した新しい配列にデータを再構築する最も簡単な方法を作成しようとしています。foreachループ中に配列内の同じキーに異なる/新しい値を指定する

元の配列は、の形態である:

$original =  [0] => (
        'cgtitle' => 'tree' 
        'cstitle' => 'branch' 
        'cgorder' => 0 
        'csorder' => 0 
        ) 
       [1] => (
        'cgtitle' => 'tree' 
        'cstitle' => 'stick' 
        'cgorder' => 0 
        'csorder' => 1 
        ) 
       [2] => (
        'cgtitle' => 'tree' 
        'cstitle' => 'leaf' 
        'cgorder' => 0 
        'csorder' => 2 
        ) 
       [3] => (
        'cgtitle' => 'car' 
        'cstitle' => 'wheel' 
        'cgorder' => 1 
        'csorder' => 0 
        ) 
       [4] => (
        'cgtitle' => 'car' 
        'cstitle' => 'bumper' 
        'cgorder' => 1 
        'csorder' => 2 
        ) 
       etc. 

及びIは、の形に似た配列が必要です。私が見ることができないとき

$new =   ['tree'] => (
        'branch', 
        'stick', 
        'leaf' 
        ) 
       ['car'] => (
        'wheel', 
        'bumper' 
        ) 
       etc. 

を巧妙なネストされたループを行う方法。私の最大の試みは、$オリジナルのforeachループを実行して、cgtitle値の新しい配列($ cgArray)を作成することでした。私は$元上の第二foreachループを実行し、それがcgtitle値を兄弟だと一致し$ cgArrayキーの内側cstitleを配置します。注文は$元から保存されています。

で2つの異なるforeach反復を実行するよりも良い方法はありますか?元?特定のキー(cgtitle)が最後の反復から変更されたことをマークするforeachループの関数など、1回のループで$ new配列を作成することができますか?例えば

foreach ($original as $key => $value) { 
    if ([$_SESSION['cOrdered'][$key]['cgtitle'] is different from valye of last loop) { 
     $new[[$_SESSION['cOrdered'][$key]['cgtitle'] = array(); 
    } else { 
     array_push($new[[$_SESSION['cOrdered'][$key]['cgtitle'], $new[[$_SESSION['cOrdered'][$key]['cstitle']); 
    } 
) 

答えて

1

私はこれが動作すると思います。

$groups = []; 
foreach ($original as $value) { 
    $groups[$value['cgtitle']][] = $value['cstitle']; 
) 

var_dump($groups); 
+0

私はこのような単純な解決策を見落とすために少しばかげていると感じます。完璧に働いてくれてありがとうございました。 – biscuitstack

関連する問題