2016-10-10 5 views
0

json urlPhp json array sort

Я хочу сортировать массив чемпионов. Я хочу отсортировать его по: « чемпионов -> 0 -> статистика -> totalSessionsPlayed« Но я не могу. Как я могу получить короткий массив?

$url = 'https://tr.api.pvp.net/api/lol/tr/v1.3/stats/by-summoner/3800684/ranked?season=SEASON2016&api_key=RGAPI-2F65B634-F9C5-4DA7-A5E3-1D955D5D1E3B'; 
$content = file_get_contents($url); 
$arr = json_decode($content); 
$sorted = sort(array_column($arr, 'totalSessionsPlayed')); 

ı нашел этот код, но ıt не работает.

+1

Пожалуйста, включите соответствующий JSON в свой вопрос. – Pete

+2

Пожалуйста, не все это. –

+0

Только * уместно * JSON, пожалуйста. – Pete

ответ

1

Использование usort с пользовательской функцией сравнения:

$champions = $arr->champions; 
// usort alters the input array, no need to assign 
usort($champions , function($a, $b) { 
    // Will sort in descending order, for ascending, switch sides 
    return $b->stats->totalSessionsPlayed - $a->stats->totalSessionsPlayed; 
}); 

В принципе, вы должны сортировать первый уровень чемпионов массива и сравнить более низкие значения внутри.

Ваш код не работает, потому что нет totalSessionsPlayed ключ в $arr массив напрямую.

0

Я надеюсь, что это может вам помочь.

Здесь я использую вложенный цикл foreach для первого объекта, а затем второй для второго объекта. Использование array_filter помогает удалить пустую строку/элемент. поскольку он возвращает false, когда присутствует пустой элемент. Функция SORT Возвращает TRUE при успешном выполнении или FALSE при сбое. Вот почему мы использовали последний цикл для отображения отсортированного результата.

<?php 
$url = 'https://tr.api.pvp.net/api/lol/tr/v1.3/stats/by-summoner/3800684/ranked?season=SEASON2016&api_key=RGAPI-2F65B634-F9C5-4DA7-A5E3-1D955D5D1E3B'; 
$content = file_get_contents($url); 
$arr = json_decode($content); 
$champions = ($arr->champions); 
foreach($champions as $champion){ 
    $champion_totalSessionsPlayed = $champion; 

    foreach($champion_totalSessionsPlayed as $champions_totalSessionsPlayed){ 
     $totalSessionsPlayed = $champions_totalSessionsPlayed->totalSessionsPlayed; 
      $totalSessionsPlayed_array[] = $totalSessionsPlayed; 
    } 
} 
$totalSessionsPlayed = array_filter($totalSessionsPlayed_array); 
sort($totalSessionsPlayed); 
$arrlength = count($totalSessionsPlayed); 
for($x = 0; $x < $arrlength; $x++) { 
    echo $totalSessionsPlayed[$x]; 
    echo "<br>"; 
} 
?> 
+2

Пожалуйста, всегда объясняйте свой код. – Pete

+0

Почему downvote ??? Просто для размещения кода? – VishalParkash

+2

Потому что в вашем ответе нет объяснений. Кодовые ответы категорически не приветствуются. – Pete