Set :: combine Cakephp,使用单维数组

时间:2015-08-07 20:18:33

标签: php arrays cakephp

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

例如

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

我想根据年龄使用Cakephp中的Set :: Combine将它们转换为以下年龄。

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

 )

我只能在特定年龄段获得一个内容。

1 个答案:

答案 0 :(得分:1)

如果我正确地理解了你的问题,你几乎可以获得你想要的东西(用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,上面应该可以使用,您只需要将Hash替换为Set

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
        ]
    ]
]