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

У меня есть массив с ключами в формате Y-m-d. Я хочу отфильтровать массив, чтобы единственные сохраненные строки были связаны с последним днем ​​​​года-месяца.

Пример массива:

array:4 [▼
  "2022-10-30" => array:9 [▶]
  "2022-10-31" => array:6 [▶]
  "2022-11-07" => array:4 [▶]
  "2022-11-09" => array:3 [▶]
]

Желаемый результат:

array:2 [▼
  "2022-10-31" => array:6 [▶]
  "2022-11-09" => array:3 [▶]
]

Важно: в этом массиве могут быть другие месяцы, и не каждый день каждого месяца представлен во входном массиве.

Я начал писать код, но не знаю, что делать дальше.

public function monthly_average()
{
    
    global $datas,$dates;
    $args= $this->period_monthAverage($datas,$dates);
    dump($args);
    //dump($datas);
    dump($dates);
    dump($dates[0]>$dates[1]);
    $fdate=array();

    for ($i = 0; $i <= sizeof($dates); $i++){
        if (date('m',strtotime($date[i]))==date('m',strtotime($date[i+1]))){

        }
        
       //dump((date('m',strtotime($date)))); 10- 11

    }

}

"Я не смог построить скрипт" - почему бы и нет?

Nico Haase 11.11.2022 07:10
stackoverflow.com/questions/1686724/… проверить этот ответ
Imran 11.11.2022 07:11

@ Имран, это другая задача.

mickmackusa 11.11.2022 07:12

Я не ищу последний день месяца, я ищу последний день в своем собственном списке @Imran

Aleyn 11.11.2022 07:15

«найти максимальную дату месяца в моем списке», я искал так, но не смог найти ни одного работающего кода-@mickmackusa

Aleyn 11.11.2022 07:17

@NicoHaase "найди максимальную дату месяца в моем списке", ты можешь помочь?

Aleyn 11.11.2022 07:22

Ага, могу: максимум в том списке, как написано, "2022-10-31" и "2022-11-09". Но я бы предположил, что вы хотите иметь это для динамического списка, содержащего разные даты? Тогда, возможно, вам следует написать какой-нибудь код, перебирая ключи, помещая их в разные подмассивы, сгруппированные по месяцам, а затем получая максимальное значение каждого из этих подмассивов?

Nico Haase 11.11.2022 07:29

Как создать динамический массив в php? Например, как мне создать мгновенный ключ для августа и сентября и поместить в него все даты? @НикоХаасе

Aleyn 11.11.2022 07:32

Это не моя проблема @steven7mwesigwa, пожалуйста, прочитайте еще раз

Aleyn 11.11.2022 07:33

@Aleyn Даты одного года?

steven7mwesigwa 11.11.2022 07:35

@Imran, пожалуйста, отзовите свое закрытое голосование, чтобы не тратить время добровольцев, которые найдут этот вопрос в очереди на рассмотрение.

mickmackusa 11.11.2022 08:00

@mickmackusa я поделился всем, чем мог

Aleyn 11.11.2022 08:04

Отсортируйте массив по ключу (от нового к старому), сгруппируйте их по номеру месяца, затем взорвите ключ массива по номеру месяца (-11), последний элемент при первой попытке — это максимальное число, а последний элемент — минимальный. Вы также можете попробовать Split и другие методы на карте массива.

Mehrwarz 11.11.2022 08:09

@Meh, пожалуйста, используйте комментарии, чтобы получить разъяснения от спрашивающего. Вы не должны давать советы по решению проблемы в виде комментария, поскольку это является вопиющим пренебрежением к простому дизайну вопросов и ответов этой платформы.

mickmackusa 11.11.2022 08:13

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

mickmackusa 11.11.2022 11:53
Отношения &quot;многие ко многим&quot; в Laravel с методами присоединения и отсоединения
Отношения &quot;многие ко многим&quot; в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
Тенденции развития PHP - почему люди выбирают его?
Тенденции развития PHP - почему люди выбирают его?
Framework ранее был известен как Personal Home Page, а затем был переименован в Hypertext Preprocessor. Это наиболее широко используемый язык для...
Принцип подстановки Лискова
Принцип подстановки Лискова
Принцип подстановки Лискова (LSP) - это принцип объектно-ориентированного программирования, который гласит, что объекты суперкласса должны иметь...
1
15
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поддерживайте массив поиска значений с ключом год-месяц, где значения представляют собой последний день месяца в календаре.

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

Код: (Демо)

$result = [];
foreach ($array as $key => $value) {
    $ym = substr($key, 0, 7);
    if (!isset($lookup[$ym]) || $lookup[$ym] < $key) {
        $result[$key] = $value;
        if (isset($lookup[$ym])) {
            unset($result[$lookup[$ym]]);
        }
        $lookup[$ym] = $key;
    }
}
var_export($result);

Или написано с меньшим количеством вызовов функций: (Demo)

$result = [];
foreach ($array as $key => $value) {
    $ym = substr($key, 0, 7);
    if (!isset($lookup[$ym])) {
        $result[$key] = $value;
        $lookup[$ym] = $key;
    } elseif ($lookup[$ym] < $key) {
        unset($result[$lookup[$ym]]);
        $result[$key] = $value;
        $lookup[$ym] = $key;
    }
}

Демы были действительно поучительны, я смог адаптировать их под себя, большое спасибо, вам было очень интересно

Aleyn 11.11.2022 09:18

Другие вопросы по теме