php - 如何将关联数组转换为多维数组

时间:2016-08-20 13:53:02

标签: php arrays multidimensional-array associative-array

我正在研究两天的关联数组,但不知何故无法达到我的答案。我正在使用for循环,让我知道是否有更好的方法来做到这一点..让我假设我有一个像下面这样的关联数组

 $students    =   array('a' => 84 , 'b' => 92 , 'a' => 93 , 'b' => 47 , 'c' => 73 , 
                        'd' => 59 , 'e' => 91 , 'a' => 78 , 'c' => 85 ,'e' => 68 ,
                        'c' => 84 , 'a' => 100 ,'d' => 92 , 'e' => 85 , 'd' => 83 ,
                        'a' => 92 , 'b' => 68 , 'b' => 79 ,'d' => 79 , 'a' => 84 ,
                        'b' => 89 , 'c' => 69 , 'c' => 67 ,'c' => 92 , 'd' => 73 , 
                        'e' => 79 , 'e' => 84);

我希望这个数组转换成一个多维数组,取所有' a'并将其放入一个阵列中' a'并对其余部分应用相同的规则,如下所示。 输出应该是这样的。

$students = array('a' => array(84, 93, 88, 100, 92, 84), 
                 'b' => array(92, 47, 68, 79, 89),
                 'c' => array(73, 85, 84, 69, 67, 92), 
                 'd' => array(59, 92, 83, 79, 73),
                 'e' => array(91, 68, 85, 79, 84));

我该怎么做?谢谢:)

2 个答案:

答案 0 :(得分:1)

您似乎没有理解的问题是您没有看起来像您建议的数组。

如果在创建后显示该数组,则可以使用

<?php

$students    =   array('a' => 84 , 'b' => 92 , 'a' => 93 , 'b' => 47 , 'c' => 73 ,
                        'd' => 59 , 'e' => 91 , 'a' => 78 , 'c' => 85 ,'e' => 68 ,
                        'c' => 84 , 'a' => 100 ,'d' => 92 , 'e' => 85 , 'd' => 83 ,
                        'a' => 92 , 'b' => 68 , 'b' => 79 ,'d' => 79 , 'a' => 84 ,
                        'b' => 89 , 'c' => 69 , 'c' => 67 ,'c' => 92 , 'd' => 73 ,
                        'e' => 79 , 'e' => 84);

print_r($students);

此输出

Array
(
    [a] => 84
    [b] => 89
    [c] => 92
    [d] => 73
    [e] => 84
)

每次重复使用某个密钥时,请说a它会使用a

键覆盖数组的现有内容

所以基本上你没有你认为的阵列,因此你无法将它转换成任何东西

答案 1 :(得分:0)

这样的东西? https://eval.in/626246

<?php

$students = [
    ['a', 84], ['b', 47], ['c', 73],
    ['a', 92], ['a', 93], ['b', 68],
];

$groups = [];
foreach ($students as list($class, $number)) {
    $groups[$class][] = $number;
}
ksort($groups);
foreach ($groups as &$numbers) {
    sort($numbers);
}
unset($numbers); // Do not forget unsetting variable reference

print_r($groups);