排序和重构多维数组在PHP



我有一个像这样的数组:

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

它应该对随机数量的不同条目(不同的键/值)工作

这样怎么样?

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

免责声明:我没有测试过这段代码

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

在使用方括号语法将数据压入键之前,不需要检查键是否存在。

function Style:(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);

相关内容

  • 没有找到相关文章

最新更新