Gridens - информационные технологии

Простая сортировка массива PHP по ключу подмассива

Пытаясь отсортировать массив ниже по «концу» без использования функции usort, есть ли простой способ сделать это?

$feature_event = array(
    array(
        "title"     => "Classic",
        "date"      => "October 28 - 30 2016",
        "end"       => strtotime("October 30, 2016")
    ),
    array(
        "title"     => "Ski Weekend",
        "date"      => "February 5-8, 2017",
        "end"       => strtotime("February 8, 2017")
    ),
    array(
        "title"     => "NBA Weekend",
        "date"      => "February 17-19, 2017",
        "end"       => strtotime("February 19, 2017")
    ),
    array(
        "title"     => "Fiesta",
        "date"      => "May 26-28, 2017",
        "end"       => strtotime("May 28, 2017")
    )

Я вывожу результат через цикл foreach, но хочу ограничиться тремя результатами.

<?php foreach( array_slice($feature_event, 0, 3) as $event): ?>
...
<?php endforeach; ?> 

Небольшое пояснение: я пытаюсь отобразить изображения, связанные с событием. Каждое событие имеет определенную дату окончания. Как только дата окончания пройдет, отобразите следующее изображение в цикле... но я хочу, чтобы массив был отсортирован по дате окончания. Я понимаю, что функция usort поможет, но я не настолько продвинулся в кодировании. Есть ли простой способ выполнить сортировку по «концу» или мне нужно будет выполнить usort. Если мне нужен usort, мне все еще нужен forloop? Плз извините за мой глупый вопрос.

ОБНОВЛЕНИЕ

Это многосортное решение массива

array_multisort(array_column($feature_event, 'end'), $feature_event);

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

в моем forloop у меня есть это условие:

<?php 
date_default_timezone_set("America/Chicago"); 
$now = strtotime("now");
?>

<?php if($now <= $event["end"]) :?>
    ... code ...
<?php endif;?>

но он выводит только 2 события.... какие-нибудь идеи о том, что я делаю неправильно. Это if находится внутри foreachloop выше.

25.07.2016

  • это из БД? почему бы не сделать это ограничение и сортировку оттуда, там больше нет array_slice и usort 25.07.2016
  • Это статические данные для небольшого веб-сайта. Это способ сортировки и ограничения в php на основе ключа подмассива, который не требует использования usort? Как я уже сказал, я бы предпочел простое решение, но если есть лучший вариант, немного более продвинутый, то я не буду против него. 25.07.2016
  • Отредактированный ответ, я неправильно прочитал часть strtotime(). 25.07.2016

Ответы:


1

Поскольку значения end являются временными метками, просто извлеките их в массив и отсортируйте, отсортировав исходный массив:

PHP ‹ 5.5.0:

array_multisort(
    array_map(function($v) { return $v['end']; }, $feature_event), $feature_event);

PHP >= 5.5.0:

array_multisort(array_column($feature_event, 'end'), $feature_event);

Или используйте SORT_DESC в качестве третьего параметра в зависимости от того, как вы хотите сортировать.

Затем используйте свой array_slice(), чтобы получить первые или последние 3 и цикл.

25.07.2016
  • Хорошо, это сортирует правильно. Я сделал print_r массива и проверил. Моя единственная проблема сейчас заключается в создании правильного условного выражения для вывода данных из цикла на основе текущей даты и дат окончания... так что, в основном, 3 самых последних события, которые не превысили дату окончания.... 25.07.2016
  • Новые материалы

    Журналы Py № 2: Если, Элиф, Иначе?
    У меня такое чувство, будто я давно ничего не писал, хотя прошло два дня с тех пор, как я опубликовал свою первую историю. В любом случае, сегодня произошло много всего, так что приступим...

    Работа в Реакции
    Я изучаю React в Bloc прямо сейчас. До сих пор я изо всех сил пытался понять темы. Тем не менее, я только что закончил проблему, над которой некоторое время размышлял, и хочу записать свой..

    Нужен ли банкам искусственный интеллект, чтобы кардинально изменить свою работу?
    Почему необходимо использовать искусственный интеллект в банковской сфере? Существенное использование многочисленных инноваций ИИ, таких как машинное обучение , глубокое обучение и..

    Какую последнюю статью вы считаете стоящей поделиться?
    Я люблю читать качественные статьи. Не стесняйтесь делиться своей работой.

    Преобразование CoreML, позволяющее использовать Fast-Neural-Style-Transfer на iOS и MacOS.
    Как использовать Fast-Neural-Style-Transfer на iOS Преобразованная модель: GitHub — john-rocky/CoreML-Models: Преобразованный зоопарк моделей CoreML...

    ИИ в правоохранительных органах: мощный инструмент с двойной природой
    Искусственный интеллект (ИИ) революционизирует правоохранительную деятельность, предлагая инновационные тактики расследования, повышая достоверность доказательств и оптимизируя процессы. Тем..

    Autoencoder Average Distance  — классический способ, используемый внутри Microsoft для выявления сходства…
    Среднее расстояние автоэнкодера (AAD) использует более простой подход для определения расстояния между двумя наборами данных. Нейронный автоэнкодер может преобразовать любой элемент данных в..