Я хочу, чтобы отсортированный массив отсортирован по значению sortOrder
внутри строки json. Я не уверен, как это сделать с помощью функций usort / ksort / asort, которые предоставляет PHP.
Должен ли я строить свою собственную логику для этого или есть какой-то метод, о котором я не знаю? У меня нет доступа к изменению этого формата, поэтому не против указывать, что это глупо 🙂
Array ( [0] => Array( [name] => Apple [json] => { "type" : "Fruit", "sortOrder" : 2 } ) [1] => Array( [name] => Potato [json] => { "type" : "Fruit", "sortOrder" : 1 } ) )
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);
не$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);