За последние 24 часа нас посетили 22820 программистов и 1263 робота. Сейчас ищут 774 программиста ...

Операции с массивами и циклами PHP

Тема в разделе "PHP для новичков", создана пользователем Михаил77, 22 окт 2019.

  1. Михаил77

    Михаил77 Активный пользователь

    С нами с:
    16 окт 2019
    Сообщения:
    31
    Симпатии:
    0
    Добрый день!

    Помогите реализовать нижеуказанный алгоритм

    /// Массив цен ///

    $price = array (
    array ("DATE" => "01.01.2010", "PRICE" => "2665"),
    array ("DATE" => "01.01.2011", "PRICE" => "3071"),
    array ("DATE" => "01.07.2012", "PRICE" => "3536"),
    array ("DATE" => "01.12.2012", "PRICE" => "3530"),
    array ("DATE" => "01.01.2013", "PRICE" => "3533"),
    array ("DATE" => "01.04.2013", "PRICE" => "3427"),
    array ("DATE" => "01.07.2013", "PRICE" => "3943"),
    array ("DATE" => "01.08.2013", "PRICE" => "4065"),
    array ("DATE" => "01.10.2013", "PRICE" => "4143"),
    array ("DATE" => "01.01.2014", "PRICE" => "4065"),
    array ("DATE" => "03.08.2014", "PRICE" => "4065"),
    array ("DATE" => "01.05.2015", "PRICE" => "4370"),
    array ("DATE" => "01.07.2015", "PRICE" => "4540"),
    );

    ВО-ПЕРВЫХ
    Нужно отфильтровать в цикле по датам

    /// Даты ///

    $dateFrom = "01.01.2015";
    $dateTo = "31.12.2015";

    /// Например ///

    foreach ( $price as $element )
    {
    if ( strtotime ( $element["DATE"] ) >= strtotime ( $dateFrom ) && strtotime ( $element["DATE"] ) <= strtotime ( $dateTo ) )
    {
    $filteredPrice[] = array ("DATE" => $element["DATE"] , "PRICE" => $element["PRICE"] );
    }
    }

    При такой фильтрации получу результат

    array ("DATE" => "01.05.2015", "PRICE" => "4370"),
    array ("DATE" => "01.07.2015", "PRICE" => "4540"),

    Что необходимо сделать

    Учитывая что выбран период с 01.01.2015 а первая цена в полученном после фильтрации массиве начинается только с 01.07.2015, необходимо добавить "срез последних", то есть в массив должна попасть предыдущая цена
    array ("DATE" => "03.08.2014", "PRICE" => "4065"),

    В итоге чтобы сделать расчет для выбранного периода
    "01.01.2015" и "31.12.2015" должен получить массив

    array ("DATE" => "03.08.2014", "PRICE" => "4065"),
    array ("DATE" => "01.05.2015", "PRICE" => "4370"),
    array ("DATE" => "01.07.2015", "PRICE" => "4540"),

    ВО-ВТОРЫХ
    Есть массив проценты на который необходимо пересчитать

    /// Массив проценты ///

    $percent = array (
    array ("DATE" => "01.09.2015", "PERCENT" => "3"),
    array ("DATE" => "01.11.2015", "PERCENT" => "5"),
    array ("DATE" => "01.12.2015", "PERCENT" => "7"),
    array ("DATE" => "20.12.2015", "PERCENT" => "2"),
    );

    В итоге должны получить массив с учетом увеличения на проценты

    array ("DATE" => "03.08.2014", "PRICE" => "4065"),
    array ("DATE" => "01.05.2015", "PRICE" => "4370"),
    array ("DATE" => "01.07.2015", "PRICE" => "4540"),
    array ("DATE" => "03.09.2014", "PRICE" => "4676,20"),
    array ("DATE" => "01.11.2015", "PRICE" => "4910,01"),
    array ("DATE" => "01.12.2015", "PRICE" => "5253,71"),
    array ("DATE" => "20.12.2015", "PRICE" => "5358,78"),

    В-ТРЕТЬИХ
    Необходимо полученный массив переложить на выбранный период
    12 месяцев

    В итоге должны получить новый массив по месяцам

    array ("MONTH" => "1", "DATE" => "03.08.2014", "PRICE" => "4065"),
    array ("MONTH" => "2", "DATE" => "03.08.2014", "PRICE" => "4065"),
    array ("MONTH" => "3", "DATE" => "03.08.2014", "PRICE" => "4065"),
    array ("MONTH" => "4", "DATE" => "03.08.2014", "PRICE" => "4065"),
    array ("MONTH" => "5", "DATE" => "01.05.2015", "PRICE" => "4370"),
    array ("MONTH" => "6", "DATE" => "01.05.2015", "PRICE" => "4370"),
    array ("MONTH" => "7", "DATE" => "01.07.2015", "PRICE" => "4540"),
    array ("MONTH" => "8", "DATE" => "01.07.2015", "PRICE" => "4540"),
    array ("MONTH" => "9", "DATE" => "03.09.2014", "PRICE" => "4676,20"),
    array ("MONTH" => "10", "DATE" => "03.09.2014", "PRICE" => "4676,20"),
    array ("MONTH" => "11", "DATE" => "01.11.2015", "PRICE" => "4910,01"),
    array ("MONTH" => "12", "DATE" => "01.12.2015", "PRICE" => "5253,71"),
    array ("MONTH" => "12", "DATE" => "20.12.2015", "PRICE" => "5358,78"),

    Период будет выбираться только в рамках одного года
     
  2. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Михаил77, самое время посмотреть в сторону использования базы данных.
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    есть спец php функция .. и не фильтровать, а сортировать :)
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Походу все же фильтровать:
     
    MouseZver нравится это.
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    про***нил
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    @Михаил77, уже вторая на моей памяти тема. Пора было освоить кнопки вставки кода и т.п. А то модеры будут ругаться ;)
     
  7. Михаил77

    Михаил77 Активный пользователь

    С нами с:
    16 окт 2019
    Сообщения:
    31
    Симпатии:
    0
    Ок, исправлюсь : )