在PHP中对多维数组进行排序和重组?

时间:2015-09-16 20:22:33

标签: php arrays sorting multidimensional-array

我有一个像这样的数组:

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

我想像这样对它进行排序和重组:

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

它适用于随机数量的不同条目(不同的键/值)。

3 个答案:

答案 0 :(得分:0)

这样的事情怎么样?

//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:我还没有测试过这段代码。

答案 1 :(得分:0)

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

$a=call_user_func(function($a){
    $ret=array();

    foreach($a as $v){
    if(array_key_exists($v['key'],$ret)){
        $ret[$v['key']][]=$v['value'];
        } else {
        $ret[$v['key']]=array($v['value']);
        }
        }
        return $ret;
},$a);
var_dump($a);

答案 2 :(得分:0)

在使用方括号语法将数据推入键之前,您无需检查键是否存在。

函数风格:(Demo)

var_export(
    array_reduce(
        $toSort,
        function($result, $row) {
            $result[$row['key']][] = $row['value'];
            return $result;
        },
        []
    )
);

基本循环加数组解构:(Demo)

$result = [];
foreach ($toSort as ['value' => $value, 'key' => $key]) {
    $result[$key][] = $value;
}
var_export($result);