2012-11-26 36 views
2

我在CakePHP的2.2.3這個多維assoc命令$模塊陣列:重新排列多維數組中的CakePHP 2.2

 
array(
    'type1' => array(
     (int) 0 => array(
      'name' => 'name16', 
      'type' => '1', 
      'category' => 'categoryC', 
      'zone' => 'zone1' 
     ), 
     (int) 1 => array(
      'name' => 'name17', 
      'type' => '1', 
      'category' => 'categoryB', 
      'zone' => 'zone1' 
     ), 
     (int) 2 => array(
      'name' => 'name18', 
      'type' => '1', 
      'category' => 'categoryA', 
      'zone' => 'zone3' 
     ), 
     (int) 3 => array(
      'name' => 'name19', 
      'type' => '1', 
      'category' => 'categoryC', 
      'zone' => 'zone3' 
     ), 
     (int) 4 => array(
      'name' => 'name22', 
      'type' => '1', 
      'category' => 'categoryA', 
      'zone' => 'zone2' 
     ) 
    ), 
    'type2' => array(
     (int) 0 => array(
      'name' => 'name1', 
      'type' => '2', 
      'category' => 'categoryB', 
      'zone' => 'zone2' 
     ), 
     (int) 1 => array(
      'name' => 'name2', 
      'type' => '2', 
      'category' => 'categoryB', 
      'zone' => 'zone2' 
     ), 
     (int) 2 => array(
      'name' => 'name3', 
      'type' => '2', 
      'category' => 'categoryA', 
      'zone' => 'zone1' 
     ), 
     (int) 3 => array(
      'name' => 'name4', 
      'type' => '2', 
      'category' => 'categoryC', 
      'zone' => 'zone3' 
     ), 
     (int) 4 => array(
      'name' => 'name5', 
      'type' => '2', 
      'category' => 'categoryA', 
      'zone' => 'zone3' 
     ) 
    ) 
) 

,我想重新安排它像

 
array(
    'zone1' => array(
     'type1' => array(
      (int) 0 => array(
       'name' => 'name17', 
       'type' => '1', 
       'category' => 'categoryB' 
      ), 
      (int) 1 => array(
       'name' => 'name16', 
       'type' => '1', 
       'category' => 'categoryC' 
      ) 
     ), 
     'type2' => array(
      (int) 0 => array(
       'name' => 'name3', 
       'type' => '2', 
       'category' => 'categoryA' 
      ) 
     ) 
    ), 
    'zone2' => array(
     'type1' => array(
      (int) 0 => array(
       'name' => 'name22', 
       'type' => '1', 
       'category' => 'categoryA' 
      ) 
     ), 
     'type2' => array(
      (int) 0 => array(
       'name' => 'name1', 
       'type' => '2', 
       'category' => 'categoryB' 
      ), 
      (int) 1 => array(
       'name' => 'name2', 
       'type' => '2', 
       'category' => 'categoryB' 
      ) 
     ) 
    ), 
    'zone3' => array(
     'type1' => array(
      (int) 0 => array(
       'name' => 'name18', 
       'type' => '1', 
       'category' => 'categoryA' 
      ), 
      (int) 0 => array(
       'name' => 'name19', 
       'type' => '1', 
       'category' => 'categoryC' 
      ) 
     ), 
     'type2' => array(
      (int) 0 => array(
       'name' => 'name5', 
       'type' => '2', 
       'category' => 'categoryA' 
      ), 
      (int) 1 => array(
       'name' => 'name4', 
       'type' => '2', 
       'category' => 'categoryC' 
      ) 
     ) 
    ) 
) 

其中, '類別' 應每個父「類型」

我與

$modules = Hash::combine($modules, '{n}', '{n}.{n}', '{s}.{s}.{n}.zone');
試圖內按字母順序排序

但沒有成功。我想我沒有使用Hash :: combine,因爲我應該...
謝謝,Marius

+0

我認爲這個問題的答案會根據您對以下問題的回答而大不相同。原始數組中的區域編號是「動態」還是有固定數量的區域zone1,zone2,zone3。如果它們是固定的,則可以爲每個區域使用array_search()。 –

+0

你好,我陣列中的區域名稱是動態的,沒有預設,沒有固定的數量。謝謝! – Marius

+0

我在這件事上摸不着頭腦。我知道你的頁面加載時間會隨着你在區域數量上的增長而變得無法忍受,並且必須嵌套一堆foreach循環。很想看看有沒有人提出一些好的解決方案。你可能在哈希類的正確軌道上,但我不太熟悉它。 –

回答

0

只需使用foreach中的foreach來遍歷數組並根據您的偏好構造一個新的數組。

+0

感謝您的回答,但我希望我可以使用一些優化的cakephp函數,但最終我想我會最終使嵌套的foreach循環完成。 – Marius

+0

在您花時間提問您將能夠編寫2個高度優化的循環的時候。 –

+0

我已經做到了,謝謝。 :) – Marius