Saqlain Syed Saqlain Syed - 3 months ago 7
PHP Question

php - how to convert an associative array to a multidimensional array

I am working on associative arrays from two days, but somehow could not reach to my answer. I am using for loop for this, let me know if there some better approach to do this.. let suppose I have an associative array like below

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


and I want this array to convert into a multidimensional array, take all values of 'a' and put this into an array 'a' and apply the same rule for the rest like given below.
The out put should be like.

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


How should I do this ? Thanks :)

Answer

Something like this? 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);