在cakephp 2.2中重新排列多维数组

时间:2012-11-26 15:15:23

标签: php arrays cakephp multidimensional-array

我在cakephp 2.2.3中有这个多维关联$ modules数组:

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'
            )
        )
    )   
)

其中'category'应在每个父类'type'中按字母顺序排序

我试过

$modules = Hash::combine($modules, '{n}', '{n}.{n}', '{s}.{s}.{n}.zone');

但没有成功。我想我不是在使用Hash :: combine,因为我应该...... 谢谢,马吕斯

1 个答案:

答案 0 :(得分:0)

只需在foreach中使用foreach来遍历您的阵列并根据您的偏好构建一个新阵列。