[
{
"id": "123",
"name": "aaa"
},
{
"id": "567",
"name": "bbb"
},
{
"id": "469",
"name": "ccc"
},
{
"id": "577",
"name": "ddd"
},
{
"id": "388",
"name": "eee"
}
]
如何在json解码时下订单?
$data = json_decode($json);
foreach ($data as $row) {
sort($row)?
}
我需要将所有解码数据设为order by id
。
最终数据输出:"name": "aaa", "name": "eee", "name": "ccc", "name": "bbb", "name": "ddd"
答案 0 :(得分:6)
您可以使用usort()
。
$data = json_decode($json);
usort($data, function($a, $b) {
if ($a->id == $b->id) {
return 0;
}
return $a->id < $b->id ? -1 : 1;
});
或者,如果你正在使用PHP&lt; 5.3,您需要定义比较函数,因为在PHP 5.3中添加了对匿名函数的支持。
function cmp($a, $b) {
if ($a->id == $b->id) {
return 0;
}
return $a->id < $b->id ? -1 : 1;
}
$data = json_decode($json);
usort($data, 'cmp');
这会对数组进行排序。之后,如果您要创建仅包含name
值的数组,则可以使用foreach
执行此操作。
$result = array();
foreach ($data as $entry) {
$result[] = array('name' => $entry->name);
}
$result
变量现在将包含:
array(array('name' => 'aaa'),
array('name' => 'eee'),
array('name' => 'ccc'),
array('name' => 'bbb'),
array('name' => 'ddd'));
然后,要再次将结果编码为JSON,您可以调用json_encode()
。
echo json_encode($result);
这将输出类似于:
的字符串[{"name": "aaa"},
{"name": "eee"},
{"name": "ccc"},
{"name": "bbb"},
{"name": "ddd"}]