组合Cakephp,用单维数组创建多维数组


Set::combine Cakephp, creating multi dimensional array using single dimensional array

我有一个具有多个值的数组对于相同键的数组

Array(
   [0] => Array(
                  'name' => "Bob",
                  'age'  => 20,
                  'marks'=> 50
               )
   [1] => Array(
                  'name' => "Ryan",
                  'age'  => 20,
                  'marks'=> 57
               )
   [2] => Array(
                  'name' => "Allen",
                  'age'  => 23,
                  'marks'=> 70
               )
   [3] => Array(
                  'name' => "Duke",
                  'age'  => 23,
                  'marks'=> 67
               )
   [4] => Array(
                  'name' => "Matt",
                  'age'  => 24,
                  'marks'=> 85
               )
)

我想把它们转换成按照年龄使用Set::Combine在Cakephp.

Array(
   [20] => Array(
                 [0] => Array(
                             'name' => "Bob",
                             'age'  => 20,
                             'marks'=> 50
                             )
                 [1] => Array(
                             'name' => "Ryan",
                             'age'  => 20,
                             'marks'=> 57
                             )
                )
   [23] => Array(
                 [0] => Array(
                             'name' => "Allen",
                             'age'  => 23,
                             'marks'=> 70
                             )
                 [1] => Array(
                             'name' => "Duke",
                             'age'  => 23,
                             'marks'=> 67
                             )
                )
   [24] => Array(
                 [0] => Array(
                             'name' => "Matt",
                             'age'  => 24,
                             'marks'=> 85
                             )
                )
 )

我只能得到一个特定年龄的内容

如果我正确理解了你的问题,你可以获得几乎你想要的使用这个(测试与CakePHP 3):

Hash::combine($array, '{n}.user', '{n}', '{n}.age') ;

你可以使用array_maparray_values来得到你想要的:

array_map('array_values', Hash::combine($array, '{n}.name', '{n}', '{n}.age'))

不要忘记添加use语句:use 'Cake'Utility'Hash ;

编辑:看起来你正在使用CakePHP 2,上面应该工作,你只需要用Set替换Hash:

array_map('array_values', Set::combine($array, '{n}.name', '{n}', '{n}.age'))

的例子:

$array = array(
    0 => array(
        'name' => "Bob",
        'age'  => 20,
        'marks'=> 50
    ),
    1 => array(
        'name' => "Ryan",
        'age'  => 20,
        'marks'=> 57
    ),
    2 => array(
        'name' => "Allen",
        'age'  => 23,
        'marks'=> 70
    ),
    3 => array(
        'name' => "Duke",
        'age'  => 23,
        'marks'=> 67
    ),
    4 => array(
        'name' => "Matt",
        'age'  => 24,
        'marks'=> 85
    )
) ;
debug($array);
debug('Cake'Utility'Hash::combine($array, '{n}.user', '{n}', '{n}.age'));
debug(array_map('array_values', 'Cake'Utility'Hash::combine($array, '{n}.name', '{n}', '{n}.age')));
输出:

'src'Controller'PagesController.php (line 61) 
[
    (int) 0 => [
        'name' => 'Bob',
        'age' => (int) 20,
        'marks' => (int) 50
    ],
    (int) 1 => [
        'name' => 'Ryan',
        'age' => (int) 20,
        'marks' => (int) 57
    ],
    (int) 2 => [
        'name' => 'Allen',
        'age' => (int) 23,
        'marks' => (int) 70
    ],
    (int) 3 => [
        'name' => 'Duke',
        'age' => (int) 23,
        'marks' => (int) 67
    ],
    (int) 4 => [
        'name' => 'Matt',
        'age' => (int) 24,
        'marks' => (int) 85
    ]
]

'src'Controller'PagesController.php (line 62) 
[
    (int) 20 => [
        'Bob' => [
            'name' => 'Bob',
            'age' => (int) 20,
            'marks' => (int) 50
        ],
        'Ryan' => [
            'name' => 'Ryan',
            'age' => (int) 20,
            'marks' => (int) 57
        ]
    ],
    (int) 23 => [
        'Allen' => [
            'name' => 'Allen',
            'age' => (int) 23,
            'marks' => (int) 70
        ],
        'Duke' => [
            'name' => 'Duke',
            'age' => (int) 23,
            'marks' => (int) 67
        ]
    ],
    (int) 24 => [
        'Matt' => [
            'name' => 'Matt',
            'age' => (int) 24,
            'marks' => (int) 85
        ]
    ]
]
'src'Controller'PagesController.php (line 63)
[
    (int) 20 => [
        (int) 0 => [
            'name' => 'Bob',
            'age' => (int) 20,
            'marks' => (int) 50
        ],
        (int) 1 => [
            'name' => 'Ryan',
            'age' => (int) 20,
            'marks' => (int) 57
        ]
    ],
    (int) 23 => [
        (int) 0 => [
            'name' => 'Allen',
            'age' => (int) 23,
            'marks' => (int) 70
        ],
        (int) 1 => [
            'name' => 'Duke',
            'age' => (int) 23,
            'marks' => (int) 67
        ]
    ],
    (int) 24 => [
        (int) 0 => [
            'name' => 'Matt',
            'age' => (int) 24,
            'marks' => (int) 85
        ]
    ]
]