2012-11-26 32 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