Показывать заголовки ближайших дат выпуска, используя foreach-массив в PHP - PullRequest
0 голосов
/ 16 октября 2018

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

Мой массив выглядит следующим образом (фактический массив содержит гораздо больше информации, поэтому это всего лишь копия):

$arr = [
    [
        'id' => 'UP0006-CUSA08724_00-BATTLEFIELDV0000',
        'attributes' => [
            'name' => 'Battlefield V [test1]',
            'thumbnail-url-base' => 'https://store.playstation.com/store/api/chihiro/00_09_000/container/US/en/999/UP0006-CUSA08724_00-BATTLEFIELDV0000/1539651459000/image'
            'release-date' => '2018-12-14T00:00:00Z'
        ],
    ],
    [
        'id' => 'UP0006-CUSA08724_00-BATTLEFIELDV0000',
        'attributes' => [
            'name' => 'Battlefield V [test2]',
            'thumbnail-url-base' => 'https://store.playstation.com/store/api/chihiro/00_09_000/container/US/en/999/UP0006-CUSA08724_00-BATTLEFIELDV0000/1539651459000/image'
            'release-date' => '2018-10-14T00:00:00Z'
        ],
    ],
    [
        'id' => 'UP0006-CUSA08724_00-BATTLEFIELDV0000',
        'attributes' => [
            'name' => 'Battlefield V [test3]',
            'thumbnail-url-base' => 'https://store.playstation.com/store/api/chihiro/00_09_000/container/US/en/999/UP0006-CUSA08724_00-BATTLEFIELDV0000/1539651459000/image'
            'release-date' => '2019-10-14T00:00:00Z'
        ],
    ],
];

Я хочуна отображаются названия игр, которые ближе всего к выпуску к текущей дате , такие как [test1], и пропускают уже выпущенные , такие как [test2].

Я пытался пропустить их, используя следующую строку:

if (strtotime(date('Y-m-d H:i:s')) > strtotime($title['attributes']['release-date'])) continue;

Но почему-то кажется, что они не пропускаются, а просто сохраняют их.

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

Мой полный код:

foreach($json['included'] as $key => $title) {
    $cusa = substr(explode('-', $title['id'], 3)[1], 0, -3);

    if($title['type'] == 'game' && substr($cusa, 0, 4) == 'CUSA') {
        // if the day of release has already passed, skip
        if (strtotime(date('Y-m-d H:i:s')) > strtotime($title['attributes']['release-date'])) continue;
            ?>
            <div class="game-banner" style="background:url(<?php echo $title['attributes']['thumbnail-url-base']; ?>)">
                <h4 class="psplus-game-name"><?php echo $title['attributes']['name']; ?></h4>
            </div>
            <?php
            if($key >= 4) break; // display only 3
        }
    }
}

1 Ответ

0 голосов
/ 16 октября 2018

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

foreach($arr as $game){
    $timeleft = strtotime($game['attributes']['release-date'])-time();
    if($timeleft>0) echo floor($timeleft/86400) ." days left to ".$game['attributes']['name'] ." \n";
}

//58 days left to Battlefield V [test1] 
//362 days left to Battlefield V [test3] 

https://3v4l.org/OMetR

Если ваш исходный массив не отсортирован, а вы хотите затем отсортировать, вы можете добавить их в массив с ключом timeleft и отсортировать по ключам с помощью ksort ().

foreach($arr as $game){
    $timeleft = strtotime($game['attributes']['release-date'])-time();
    if($timeleft>0) $games[$timeleft] = floor($timeleft/86400) ." days left to ".$game['attributes']['name'] ." \n";
}

ksort($games);
echo implode("", $games);

https://3v4l.org/gbLCs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...