我有一个像这样的数组:
$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);