我有一个数组,对于相同键的数组具有相同值的多个值
例如
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
)
)
)
我只能在特定年龄段获得一个内容。
答案 0 :(得分:1)
如果我正确地理解了你的问题,你几乎可以获得你想要的东西(用CakePHP 3测试):
Hash::combine($array, '{n}.user', '{n}', '{n}.age') ;
然后,您可以使用array_map
和array_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
]
]
]