PHP, массив - смешанный порядок, steam api возвращает другой порядок - PullRequest
1 голос
/ 05 мая 2020

как я могу отсортировать это по номеру, 0 - 1+ не по первой букве?

error_reporting(E_ALL);
ini_set("display_errors", 1);

$players = array();             

$playerIds = [
    '76561197972192473',
    '76561198972352439',
    '76561198087304080',
    '76561198799985528',
    '76561198338485290'
];

$url = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=294CFDFSFCWE5EG5FE4&steamids=".implode(',', $playerIds);
$json_object= file_get_contents($url);
$json_decoded = json_decode($json_object);

foreach ($json_decoded->response->players as $key=>$player) {

    $players[] = [
        'name' => $player->personaname,
        'profileurl' => $player->profileurl,
        'avatarfull' => $player->avatarfull,
        'personastate' => $player->personastate
    ];
} 

usort($players, function($a, $b) {
    if ($a['name'] === $b['name']) {
        return 0;
    }

    return ($a['name'] < $b['name']) ? -1 : 1;
});

Когда я удаляю usort, steam api будет возвращать идентификаторы каждый раз в другом порядке, так что вы можете мне помочь, как я могу заставить его начинаться с 0 из playerIds.

1 Ответ

0 голосов
/ 05 мая 2020

Просто добавьте steamid в качестве индекса, а затем отсортируйте его по ключам:

foreach ($json_decoded->response->players as $key=>$player) {
    $players[$player->steamid] = [
        'name' => $player->personaname,
        'profileurl' => $player->profileurl,
        'avatarfull' => $player->avatarfull,
        'personastate' => $player->personastate
    ];
}
ksort($players);

В качестве альтернативы вы можете сделать это так же, как вы делаете это, но добавить steamid к $players array:

$players[] = [
    'id' => $player->steamid,
    'name' => $player->personaname,
    'profileurl' => $player->profileurl,
    'avatarfull' => $player->avatarfull,
    'personastate' => $player->personastate
];

Затем отсортируйте по id:

array_multisort(array_column($players, 'id'), SORT_DESC, $players);

Возможно, есть параметр, который нужно передать API, который вернет их, отсортированные так, как вы хотите , не уверен.

...