Intereting Posts
PHP include () с атрибутами GET (include file.php? Q = 1) Отображение всех изображений из сообщения WordPress Как создать виртуальный столбец с помощью MySQL SELECT? Перенаправление на новую страницу после загрузки jquery Мой тег заголовка php не будет перенаправлен Загрузка изображения на сервер через imagepicker не работает (требуется решение) PHP: получить число десятичных цифр Предупреждение: неожиданный символ на входе: "(ascii = 29) state = 0 in mod_rewrite для REST API на PHP Замечание PHP: Неопределенный индекс, хотя использование try \ catch Я правильно поддерживаю UTF-8 в своих PHP-приложениях? Google API – запрос на токен из Oauth2 возвращает нулевой токен Flex и Zend_AMF: Как получить массив FlexCollection Flex из PHP в PHP? Каков правильный способ документировать PHP-константы (определить) с помощью phpDocumentor Есть ли у PHP функция, которая возвращает правильное расширение файла с учетом допустимого типа содержимого?

Как отсортировать массив в PHP по значению, которое находится внутри форматированной строки json?

Я хочу, чтобы отсортированный массив отсортирован по значению 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);