如何在PHP中按多个值对JSON数组排序?
我在PHP中有一个嵌套的JSON数组,其中包含以下字段:如何在PHP中按多个值对JSON数组排序?,php,arrays,json,Php,Arrays,Json,我在PHP中有一个嵌套的JSON数组,其中包含以下字段: { "items": [{ "id": "8498", "title": "Item 2", "pubdate": "2015-03-01 10:29:00 +0000", }, { "id": "8497", "title": "Item 1", "pubdate": "2015-03-01 16:29:00 +0000",
{
"items": [{
"id": "8498",
"title": "Item 2",
"pubdate": "2015-03-01 10:29:00 +0000",
}, {
"id": "8497",
"title": "Item 1",
"pubdate": "2015-03-01 16:29:00 +0000",
}
}]
}
我想对Items数组中的节点进行重新排序,以便它们首先按pubdate(从最早到最新)排序,然后在pubdate中,每次按ID(从最小到最大)排序,如果这有意义的话
目前我正在使用下面的函数,但它只接受1个排序值(我目前使用到pubdate)。我可以按上述方式将其修改为接受两个吗
function subval_sort($a,$subkey) {
foreach($a as $k=>$v) {
$b[$k] = strtolower($v[$subkey]);
}
asort($b);
foreach($b as $key=>$val) {
$c[] = $a[$key];
}
return $c;
}
$json_o['items'] = subval_sort($json_o['items'],'pubdate');
尝试使用usort
ide1直播:
$arr=json\u decode($json,true);
$items=$arr['items'];
usort($items,function($a,$b){
如果($a['pubdate']=$b['pubdate'])
返回$a['id']<$b['id'];
报税表($a['pubdate']<$b['pubdate'])?-1:1;
});
使用@Gal链接的解决方案解决了它:)
通过修改本文作者的答案,您可以创建一个更通用的解决方案
function subval_sort($a, $key1, $asc1, $key2, $asc2) {
# get a list of sort columns and their data to pass to array_multisort
$sort = array();
foreach($a as $k=>$v) {
$sort[$key1][$k] = $v[$key1];
$sort[$key2][$k] = $v[$key2];
}
$sortDesc1 = $asc1 ? SORT_ASC : SORT_DESC;
$sortDesc2 = $asc2 ? SORT_ASC : SORT_DESC;
# sort by event_type desc and then title asc
array_multisort($sort[$key1], $sortDesc1, $sort[$key2], $sortDesc2,$a);
}
您可以这样调用它:
$json_o['items'] = subval_sort($json_o['items'], 'pubdate', false, 'id', true);
function subval_sort($a, $key1, $asc1, $key2, $asc2) {
# get a list of sort columns and their data to pass to array_multisort
$sort = array();
foreach($a as $k=>$v) {
$sort[$key1][$k] = $v[$key1];
$sort[$key2][$k] = $v[$key2];
}
$sortDesc1 = $asc1 ? SORT_ASC : SORT_DESC;
$sortDesc2 = $asc2 ? SORT_ASC : SORT_DESC;
# sort by event_type desc and then title asc
array_multisort($sort[$key1], $sortDesc1, $sort[$key2], $sortDesc2,$a);
}
$json_o['items'] = subval_sort($json_o['items'], 'pubdate', false, 'id', true);