результаты сортировки JSON в цикле foreach

Я запускаю цикл foreach для отображения результатов json, когда выполняются определенные условия, и хотел бы отсортировать их по name поле. я стараюсь usort(), но не могу понять это.

JSON:

{
"Shawn Taylor":{
"name":"Shawn Taylor",
"title":"",
"photo_url":"house_165 (1).jpg",
},
"Another Name": {
"name":"Another Name",
"title":"Title is here",
"photo_url":"Person.jpg",
}
}

PHP:

$data_json = file_get_contents('data.json');
$data_array = json_decode($data_json, true);
$i = 0;
foreach($data_array as $key => $person){
if($person['title'] == 'some title'){
include('card.php');
if(++$i % 4 === 0) {
echo '<div class="clearfix"></div>'; // inserts a clearfix every 4 cards
}
}
}

Это возвращает все ожидаемые результаты, но не отсортированные. Я пробовал usort () несколькими разными способами, но просто ужасно упал мне на лицо 🙂 Пожалуйста, помогите!

-1

Решение

сначала используйте json_decode для преобразования в массив php, установите флаг в TRUE для ассоциативного массива $myarr = json_decode($array, TRUE)
попробовать пользовательский usort

 // Sort the multidimensional array
usort($myarr, "custom_sort");
// Define the custom sort function
function custom_sort($a,$b) {
return $a['name']>$b['name'];
}

Надеюсь, это поможет.

1

Другие решения

Ваш JSON неправильно отформатирован. Есть пара дополнительных запятых, по одной после каждого элемента JPG. Удалено ниже.

Затем, json_decode строка json в ассоциативный массив PHP и, поскольку вы используете имена в качестве индексов json, ksort (сортировка ключей) результирующий массив.

$json_string = '{
"Shawn Taylor":{
"name":"Shawn Taylor",
"title":"",
"photo_url":"house_165 (1).jpg"},
"Another Name": {
"name":"Another Name",
"title":"Title is here",
"photo_url":"Person.jpg"}
}';

$data_array = json_decode($json_string, true);
ksort($data_array);

// the remaining code

print_r после ksort дисплеи:

Array
(
[Another Name] => Array
(
[name] => Another Name
[title] => Title is here
[photo_url] => Person.jpg
)

[Shawn Taylor] => Array
(
[name] => Shawn Taylor
[title] =>
[photo_url] => house_165 (1).jpg
)

)

Если вам нужно отсортировать по вложенному индексу, и вы хотите сохранить ассоциативный массив, используйте uasort:

uasort($data_array, 'sort_name_index');

function sort_name_index($a, $b) {
return $a['name'] > $b['name'];
}
2

По вопросам рекламы [email protected]