Сортировать от высшего к низшему - PHP

Я создаю раздел для спонсируемых серверов, и я хотел бы создать следующее: Таблица с указанием спонсируемых серверов, которые должны быть ранжированы от самого высокого до самого низкого в таблице. Они будут классифицированы в зависимости от количества голосов, которые имеет каждый, и первый, который появляется в таблице, должен иметь метку <tr class="success">, а остальные должны иметь метку <tr>.

В файле servers-sponsored.json хранятся 3 спонсируемых сервера в формате JSON. Файл all-the-servers.json содержит гораздо больше серверов, включая спонсируемые серверы, и для каждого есть ключ VOTOS, который содержит целое число числа голосов сервера. Спонсируемые серверы должны быть организованы от наивысшего к низшему благодаря количеству голосов каждого .

Я попытался использовать следующий код PHP:

<?php foreach(json_decode(file_get_contents('servidores-patrocinados.json')) as $servidor_patrocinado) {
if(!max((arsort(json_decode(file_get_contents('todos-los-servidores.json')))['VOTOS'] == $servidor_patrocinado)) continue; //Continuar al siguiente foreach, el primero necesita ser el con más votos
}
?>

И у меня это не сработало.

Файловая структура

спонсорские-серверы.json :

[
    {
        "NAME": "Aphmau Craft",
        "MCPE_LIST": "minecraftpocket-servers.com",
        "ALIAS": "Aphmau"
    },
    {
        "NAME": "CCPvP",
        "MCPE_LIST": "minecraftpocket-servers.com",
        "ALIAS": "Vote"
    },
    {
        "NAME": "OPMCPE",
        "MCPE_LIST": "minecraftpocket-servers.com",
        "ALIAS": "r8i5"
    }
]

все-серверы.json : (Есть много подробнее):

[
    {
        "MCPE_LIST": "minecraftpocket-servers.com",
        "URL": "https:\/\/minecraftpocket-servers.com\/server\/62849\/vote\/",
        "PREMIUM": false,
        "ALIAS": "5hv7",
        "VOTES": 6,
        "SERVER_NAME": "DateCraftRP",
        "PASSWORD": "$2y$10$UVFMjTy4EtlkN3NFpFhRHOis..EKk5mg5GfpCkcDzO5EERh0kQ3jq"
    },
    {
        "MCPE_LIST": "minecraftpocket-servers.com",
        "URL": "https:\/\/minecraftpocket-servers.com\/server\/64455\/",
        "PREMIUM": false,
        "ALIAS": "Aphmau",
        "VOTES": 284,
        "SERVER_NAME": "Aphmau Craft!",
        "PASSWORD": "$2y$10$xsjwMaheRlfhx.5MXOdFPOJLmEIPlCi12ONWQIXrjxtVVlkW5LYRC"
    },
    {
        "MCPE_LIST": "minecraftpocket-servers.com",
        "URL": "https:\/\/minecraftpocket-servers.com\/server\/49063",
        "PREMIUM": false,
        "ALIAS": "Ashcraft",
        "VOTES": 0,
        "SERVER_NAME": "AshcraftPE",
        "PASSWORD": "$2y$10$1K2o79HQ52dDs\/KxZ1kH0.ogTWyRZvBa02qg5DgqNlfZmfQhMGr8m"
    }
]

Кстати, ALIAS используется для дифференциации одного сервера от другого.

0
задан 29.07.2017, 08:32
1 ответ

Â: C¦mo создавать таблицу с покровительствующими аккуратными серверами según количество обеты восходящей формы?

Сначала мы будем использовать funci¦n file_get_contents, чтобы получать контент файла json и хранить цепь в переменной $jsonP.

$jsonP = file_get_contents('servidores-patrocinados.json');
$jsonS = file_get_contents('todos-los-servidores.json');

Después посредством funci¦n json_decode декодирует цепь JSON и обращают ее в переменную PHP.

$patrocinados = json_decode($jsonP, true);
$servidores = json_decode($jsonS, true);

Мы Пробегаем договоренность $patrocinados, в каждом iteraci¦n пробегается договоренность $servidores, чтобы искать, если существуют два сервера с тем же прозвищем, в случае, если asà - это будет тот añade элемент договоренности $servidores (это тот, который имеет обеты) по отношению к договоренности $servers.

foreach ($patrocinados as $patrocinado) {
    foreach ($servidores as $servidor) {
        if ($servidor["ALIAS"] == $patrocinado["ALIAS"]) {
            $servers[] = $servidor;
        }
    }
}

Как уже у нас есть переменная $servers, которая содержит двухмерную договоренность со спонсируемыми серверами и обетами каждого из них, что нам остается делать, состоит в том, чтобы упорядочивать ее используя funci¦n usort, который получает два parÃ: метры, первый parÃ: метр - договоренность и второй - funci¦n, который он определяет c¦mo, нужно упорядочивать договоренность. Funci¦n сравнивает, если обеты ($a["VOTES"]) из элемента он меньше, чем те другого ($b["VOTES"]), если condici¦n выполняется, возвращает 1 а возвращает -1.

Этот синтаксис condición ? verdadero : falso принадлежит тройному оператору, возможно делать то же самое посредством решения о контроле if, а именно, if (condicion) {verdadero} else {falso}.

usort($servers, function($a, $b) {
    return $a["VOTES"] < $b["VOTES"] ? 1 : -1;
});
?>

В этом моменте договоренность является аккуратной и только нам остается пробегать того же самого, чтобы добавлять линии (<tr>) к таблице (<table>).

<table>
    <thead>
        <tr>
            <th>Nombre</th>
            <th>Votos</th>
        </tr>
    </thead>
    <tbody id="servidores">
        <?php foreach ($servers as $servidor) { ?>
            <!-- Se podría agregar un if que compruebe si es la primera fila 
            (es decir, si el indice es igual a 0) para colocar la clase "success", 
            pero no es muy elegante -->
            <tr>
                <td><?php echo $servidor["SERVER_NAME"] ?></td>
                <td><?php echo $servidor["VOTES"] ?></td>
            </tr>
        <?php } ?>
    </tbody>
</table>

Â: C¦mo добавлять класс success к первой линии таблицы? Сначала нужен выбирать

первый сын (<tr>) из <tbody> посредством свойства firstChildElement.

var primeraFila = document.getElementById('servidores').firstElementChild;

Después он añade класс success изменяя свойство classList.

primeraFila.classList.add('success');

C¦digo я завершаю

<?php

$jsonP = file_get_contents('servidores-patrocinados.json');
$patrocinados = json_decode($jsonP, true);

$jsonS = file_get_contents('todos-los-servidores.json');
$servidores = json_decode($jsonS, true);

foreach ($patrocinados as $patrocinado) {
    foreach ($servidores as $servidor) {
        if ($servidor["ALIAS"] == $patrocinado["ALIAS"]) {
            $servers[] = $servidor;
        }
    }
}

usort($servers, function($a, $b) {
    return $a["VOTES"] < $b["VOTES"] ? 1 : -1;
});
?>

var primeraFila = document.getElementById('servidores').firstElementChild;
primeraFila.classList.add('success');
.success {
  background-color: green;
}
<table>
    <thead>
        <tr>
            <th>Nombre</th>
            <th>Votos</th>
        </tr>
    </thead>
    <tbody id="servidores">
        <?php foreach ($servers as $servidor) { ?>
            <tr>
                <td><?php echo $servidor["SERVER_NAME"] ?></td>
                <td><?php echo $servidor["VOTES"] ?></td>
            </tr>
        <?php } ?>
    </tbody>
</table>
0
ответ дан 30.10.2019, 00:15
  • 1
    Спасибо, но это ordenarí во все серверы. Только я хочу упорядочить спонсируемые серверы. все - los-servidores.json был должен открываться, чтобы искать количество обетов, используя, как он снабжает ссылками ты объединял их каждого из серверов серверов - patrocinados.json . – Jorge Salas 29.07.2017, 09:55
  • 2
    функционируй совершенно, но проверь мой верхний комментарий – Jorge Salas 29.07.2017, 10:28
  • 3
    @JorgeSalas Sí когда он найдет, как делать это издало ответ. – Matias Olivera 29.07.2017, 10:33
  • 4
    @JorgeSalas Я Заношу в список, издайте ответ! – Matias Olivera 29.07.2017, 11:12
  • 5
    Спасибо, но тебя беспокоило бы просить у тебя помощь с таблицей внутри модального bootstrap? – Jorge Salas 29.07.2017, 12:27