use*_*060 5 php arrays sorting
我需要的
数组结构
[0] => Array
(
[type] => CACDA
[metadata] => Array
(
[0] => Array
(
[amount] => 320
[comment] =>
)
)
)
[1] => Array
(
[type] => CVMA
[metadata] => Array
(
[0] => Array
(
[amount] => 320
[comment] => Onsite After February 20
)
)
)
Run Code Online (Sandbox Code Playgroud)源代码
unset($data[0]);
//store types and the arrays the belong to
foreach($data as $k=>$v){
$type[$v['type']][]=$k;
}
//loop types, creating result array
foreach($type as $k=>$v){
$tmp=array(
'type'=>$k,
'metadata'=>array()
);
//loop all the arrays of this type
foreach($v as $w){
//store in TMP
$t=array(
'amount' => $data[$w]['amount'],
'comment' => $data[$w]['comment']
);
$t array structure
Array
(
[amount] => 320
[comment] =>
)
Array
(
[amount] => 320
[comment] => Onsite After February 20
)
Onsite After February 20Array
(
[amount] => 320
[comment] => Onsite After February 20
)
Onsite After February 20Array
(
[amount] => 370
[comment] => Onsite After February 20
)
Onsite After February 20Array
(
[amount] => 170
[comment] => Onsite After February 20
)
//sort TMP on EMPTY value
//usort($t,function ($a, $b) {
//if($a == '' && $b != '') return 1;
//if($b == '' && $a != '') return -1;
//if($b == 0){return 1;}
//return 0;
//});
arsort($t['comment']);
//store
$tmp['metadata'][]=$t;
}
$result[]=$tmp;
}
Run Code Online (Sandbox Code Playgroud)
排序后的数组输出应该像ex一样
[1] => Array
(
[type] => CVMA
[metadata] => Array
(
[0] => Array
(
[amount] => 320
[comment] => Onsite After February 20
)
)
)
[0] => Array
(
[type] => CACDA
[metadata] => Array
(
[0] => Array
(
[amount] => 320
[comment] =>
)
)
)
Run Code Online (Sandbox Code Playgroud)
问题我有我也尝试过usort.
我尝试过使用arsort功能,但没有任何工作可以进行排序.
请告诉我哪里做错了.
哪个排序功能我应该用于php中的键和值.
你可以用uasort.
uasort($array, function($a) {
return ( is_null($a['metadata'][0]['comment']) OR $a['metadata'][0]['comment'] == "") ? 1 : -1;
});
Run Code Online (Sandbox Code Playgroud)