我希望下面的数组按照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
}
)
)
答案 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);