如何在PHP中按照json格式化字符串中的值对数组进行排序?

时间:2014-04-02 10:55:49

标签: php arrays

我希望下面的数组按照json字符串中的sortOrder值进行排序。我不确定如何使用PHP提供的usort / ksort / asort类型函数执行此操作。

我是否必须为此构建自己的逻辑,或者是否有一些我不知道的方法?我有权更改此格式,因此请注意不要指出它的愚蠢:)

Array (
    [0] => Array(
        [name] => Apple
        [json] => {
            "type" : "Fruit",
            "sortOrder" : 2
        }
    )
    [1] => Array(
        [name] => Potato
        [json] => {
            "type" : "Fruit",
            "sortOrder" : 1
        }
    )
)

1 个答案:

答案 0 :(得分:2)

usort($array, function (array $a, array $b) {
    $a = json_decode($a['json'], true);
    $b = json_decode($b['json'], true);
    return $a['sortOrder'] - $b['sortOrder'];
});

但是,这需要您重复解码JSON,这会使某些事情变慢。最好提前解码所有JSON:

$array = array_map(function (array $values) {
    $json = json_decode($values['json'], true);
    return $values + array('sortOrder' => $json['sortOrder']);
}, $array);

usort($array, function (array $a, array $b) {
    return $a['sortOrder'] - $b['sortOrder'];
});

$array = array_map(function (array $values) {
    unset($values['sortOrder']);
    return $values;
}, $array);