Skip to content
Advertisement

Sort and restructure multidimensional array in PHP?

I have an array like this one:

$toSort = array(
    1 => 
        [
            'value' =>  8000,
            'key'   => 1007
        ],
    2 => 
        [
            'value' => 8001,
            'key'   => 1007
        ],
    3 => 
        [
            'value' => 8002,
            'key'   => 1013
        ],
);

I want to sort and restructure it like this:

$toSort = array(
    1007 => 
        [
            [0] =>  8000,
            [1] =>  8001
        ],
    1013 => 
        [
            [0] => 8002
        ]
);

It should work for a random amount of different entries (diffrent keys/values).

Advertisement

Answer

How about something like this?

//A new array to move the data to.
var $result = array();

//Loop through the original array, and put all the data
//into result with the correct structure.
foreach($toSort as $e) {
    //If this key is not set yet, then create an empty array for it.
    if(!isset($result[$e['key']])) $result[$e['key']] = array()
    //Add the value to the end of the array.
    $result[$e['key']][] = $e['value'];
}

 //Sort the result, based on the key and not the value.
 //If you want it to be based on value, just use sort() instead.
 ksort($result)

 //If you want the sub-arrays sorted as well, loop through the array and sort them.
 foreach($result as $e)
     sort($e);

Disclaimar: I have not tested this code.

User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement