JSON в многомерный массив в PHP и сортировка по ключу - PullRequest
0 голосов
/ 05 сентября 2018
[
    {
        "competitorName": "Usain Bolt",
        "country": "Jamaica",
        "event": "100m",
        "medalWon": "G",
        "worldRecord": "Y"
    },
    {
        "competitorName": "Dave Batista",
        "country": "United States",
        "event": "Wrestling",
        "medalWon": "G",
        "worldRecord": "Y"
    },
    {
        "competitorName": "Leonel Messi",
        "country": "Argentina",
        "event": "Soccer \/ Football",
        "medalWon": "G",
        "worldRecord": "N"
    },
    {
        "competitorName": "Angel Di Maria",
        "country": "Argentina",
        "event": "Soccer \/ Football",
        "medalWon": "G",
        "worldRecord": "N"
    }
]

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

$form = file_get_contents("data.json");
$data = json_decode($form,true);

<section>
<div class="container">
    <div class="row">
        <div class="col col-md-6">
            <ul><br>
                <?php foreach($data as $country) { 

                    echo "<li>". $country['country']. " has the following medal in " .$country['event']. "</li>";
                    echo "<li>".$country['competitorName']. "</li>";
                    echo "<li>".$country['medalWon']. "</li>";
                    foreach($country as $key => $value) {

                        }
                        echo "<br>";

                    }?>
                </ul>
            </div>
        </div>
    </div>
</section>

Это код, который у меня есть, пока данные поступают из json в многомерный массив. Я не могу понять, как правильно его структурировать, чтобы зациклить название страны, создать переменную счетчика и затем сохранить количество медалей.

1 Ответ

0 голосов
/ 05 сентября 2018

Вы можете сортировать массив, используя столбец (ключ) массива, как это,

    <?php
    $array = '[
    {
    "competitorName": "Usain Bolt",
    "country": "Jamaica",
    "event": "100m",
    "medalWon": "G",
    "worldRecord": "Y"
    },
    {
    "competitorName": "Dave Batista",
    "country": "United States",
    "event": "Wrestling",
    "medalWon": "G",
    "worldRecord": "Y"
    },
    {
    "competitorName": "Leonel Messi",
    "country": "Argentina",
    "event": "Soccer \/ Football",
    "medalWon": "G",
    "worldRecord": "N"
    },
    {
    "competitorName": "Angel Di Maria",
    "country": "Argentina",
    "event": "Soccer \/ Football",
    "medalWon": "G",
    "worldRecord": "N"
    }
]';

$json = json_decode($array,true);
$countries = array_column($json, 'country'); // Get countries in to another array
// Then sort according to the names in above countries array ASC
call_user_func_array('array_multisort', array($countries, SORT_ASC, SORT_STRING, &$json)); 

print_r($json);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...