在json解码中发出命令

时间:2011-11-19 20:25:22

标签: php sql-order-by json

 [
        {
            "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"

1 个答案:

答案 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"}]