2016-07-28 4 views
-1
 { "result": true,  
     "users": [{   
        "id": 11, 
        "expected_count": 13, 
        "user_id": 1, 
        "event_id": 2, 
        "user": {  
         "id": 1, 
         "name": "Moiz Jamali"  
        } 
      }, 
     {  
      "id": 12, 
      "expected_count": 12, 
      "user_id": 2, 
      "event_id": 2,  
      "user": {  
         "id": 2, 
         "name": "Juzer Samiwala"  
      } 
     }] 
} 

Над выводом моего большого массива («пользователи»).Сортировка большого массива в соответствии со значением другого массива, который находится внутри большого массива

Что я хочу сделать, так это отсортировать этот большой массив ('users') в соответствии с именем, которое находится внутри небольшого массива («пользователь») в PHP.

Может ли кто-нибудь помочь мне в этом?

спасибо.

ответ

0

Для этого можно использовать usort с strcmp. Что-то вроде этого:

$bigArray = ["result" => true, "users" => [ 
    "id" => 11, 
    "expected_count" => 13, 
    "user_id" => 1, 
    "event_id" => 2, 
    "user" => [ 
     "id" => 1, 
     "name" => "Moiz Jamali" 
    ], 
    ... other users 
]]; 

usort($bigArray['users'], function ($a, $b) 
{ 
    return strcmp($a['user']['name'], $b['user']['name']); 
}); 
+0

Большое спасибо. Оно работало завораживающе :) – Pops

0

Вы должны пользователь usort() с вашей собственной функции для сортировки массиве

Решение:

<?php 

$data = json_decode('{ "result": true, "users": [{ "id": 11, "expected_count": 13, "user_id": 1, "event_id": 2, "user": { "id": 1, "name": "Moiz Jamali" } }, { "id": 12, "expected_count": 12, "user_id": 2, "event_id": 2, "user": { "id": 2, "name": "Juzer Samiwala" } }] }'); 


function cmp($a, $b) 
{ 
    if ($a->user->name == $b->user->name) { 
     return 0; 
    } 
    return ($a->user->name < $b->user->name) ? -1 : 1; 
} 


usort($data->users, "cmp"); 

print_r($data); 

Live example

Смежные вопросы