我有这个数组:
$test['name1'][256]=[
'lead_data'=>[
'date'=>'13.03.2019',
'address'=>'addr1'
]
];
$test['name1'][257]=[
'lead_data'=>[
'date'=>'12.03.2019',
'address'=>'addr2'
]
];
$test['name2'][259]=[
'lead_data'=>[
'date'=>'15.03.2019',
'address'=>'addr4'
]
];
$test['name2'][260]=[
'lead_data'=>[
'date'=>'18.03.2019',
'address'=>'addr5'
]
];
有两个组“名称1”和“名称2”。 需要按'date'对数组进行排序,我做到了:
function array_sort_inner_array($array, $on, $order=SORT_ASC){
$new_array = array();
$sortable_array = array();
if (count($array) > 0) {
foreach ($array as $k => $v) {
if (is_array($v['lead_data'])) {
foreach ($v['lead_data'] as $k2 => $v2) {
if ($k2 == $on) {
$sortable_array[$k] = $v2;
}
}
} else {
$sortable_array[$k] = $v['lead_data'];
}
}
switch ($order) {
case SORT_ASC:
asort($sortable_array);
break;
case SORT_DESC:
arsort($sortable_array);
break;
}
foreach ($sortable_array as $k => $v) {
$new_array[$k] = $array[$k];
}
}
return $new_array;
}
$testSort =[];
foreach ($test as $k=>$t){
$testSort[$k]=array_sort_inner_array($t,'date',SORT_DESC);
}
不是我想要按“日期”列对组“名称1”和“名称2”进行排序。 因此,“名称2”必须是第一个,“名称1”组必须是第二个,因为“名称2”的日期为“ 18.03.2019”,并且它是最高值。 不知道该怎么做。请帮助我,谢谢!
答案 0 :(得分:0)
我的意思是将array_column
和uasort
用作:
function getMaxDate($e) {
return max(array_column(array_column($e, "lead_data"), "date"));
}
uasort($test, function ($a, $b) {return strcmp(getMaxDate($b), getMaxDate($a));;});
注意-如果需要,您仍然需要对内部数组进行排序-我仅演示了如何对最大日期进行外部排序-内部排序可以通过以下方式完成:
foreach($test as &$e)
uasort($e, function ($a, $b) {return strcmp($a['lead_data']['date'], $b['lead_data']['date']);;});