За последние 24 часа нас посетили 22686 программистов и 1279 роботов. Сейчас ищут 792 программиста ...

Массив PHP + месяцы (периоды)

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

  1. Михаил77

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

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

    Как можно к массиву применить месяцы?

    Есть массив месяцев

    PHP:
    1. <?
    2. $arrMonth = array(
    3. array("MONTH" => "1", "NAME" => "Январь"),
    4. array("MONTH" => "2", "NAME" =>"Февраль"),
    5. array("MONTH" => "3", "NAME" => "Март"),
    6. array("MONTH" => "4", "NAME" => "Апрель"),
    7. array("MONTH" => "5", "NAME" => "Май"),
    8. array("MONTH" => "6", "NAME" => "Июнь"),
    9. array("MONTH" => "7", "NAME" => "Июль"),
    10. array("MONTH" => "8", "NAME" => "Август"),
    11. array("MONTH" => "9", "NAME" => "Сентябрь"),
    12. array("MONTH" => "10", "NAME" => "Октябрь"),
    13. array("MONTH" => "11", "NAME" => "Ноябрь"),
    14. array("MONTH" => "12", "NAME" => "Декабрь")
    15. );
    16. ?>
    Есть массив цен с порядковым номером месяца

    PHP:
    1. <?
    2. $arrPrices = array(
    3. array("MONTH" => "3", "VALUE" => "200"),
    4. array("MONTH" => "5", "VALUE" =>"350"),
    5. array("MONTH" => "7", "VALUE" => "240"),
    6. array("MONTH" => "12", "VALUE" => "700"),
    7. array("MONTH" => "1", "VALUE" => "200"),
    8. array("MONTH" => "3", "VALUE" =>"350"),
    9. array("MONTH" => "8", "VALUE" => "240"),
    10. array("MONTH" => "8", "VALUE" => "280"),
    11. );
    12. ?>
    Как можно сделать один массив с полным перечнем месяцев чтобы на выходе получить

    PHP:
    1. <?
    2. $arrPrices = array(
    3. array("MONTH" => "1", "VALUE" => ""),
    4. array("MONTH" => "2", "VALUE" => ""),
    5. array("MONTH" => "3", "VALUE" => "200"),
    6. array("MONTH" => "4", "VALUE" => ""),
    7. array("MONTH" => "5", "VALUE" =>"350"),
    8. array("MONTH" => "6", "VALUE" => ""),
    9. array("MONTH" => "7", "VALUE" => "240"),
    10. array("MONTH" => "8", "VALUE" => ""),
    11. array("MONTH" => "9", "VALUE" => ""),
    12. array("MONTH" => "10", "VALUE" => ""),
    13. array("MONTH" => "11", "VALUE" => ""),
    14. array("MONTH" => "12", "VALUE" => "700"),
    15. array("MONTH" => "1", "VALUE" => "200"),
    16. array("MONTH" => "2", "VALUE" => ""),
    17. array("MONTH" => "3", "VALUE" =>"350"),
    18. array("MONTH" => "4", "VALUE" => ""),
    19. array("MONTH" => "5", "VALUE" => ""),
    20. array("MONTH" => "6", "VALUE" => ""),
    21. array("MONTH" => "7", "VALUE" => ""),
    22. array("MONTH" => "8", "VALUE" => "240"),
    23. array("MONTH" => "8", "VALUE" => "280"),
    24. array("MONTH" => "9", "VALUE" => ""),
    25. array("MONTH" => "10", "VALUE" => ""),
    26. array("MONTH" => "11", "VALUE" => ""),
    27. array("MONTH" => "12", "VALUE" => ""),
    28. );
    29. ?>
     
  2. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Я конечно не понимаю почему у тебя в итоговом массиве несколько раз дублируются месяца. Но вот я так сделал. Может можно и короче.

    PHP:
    1. $NewArr = [];
    2.     foreach($arrMonth as $item){
    3.         $m = $item['MONTH'];
    4.         $price = '';
    5.         foreach($arrPrices as $item2){
    6.             if($m == $item2['MONTH']){
    7.                 $price = $item2['VALUE'];
    8.                 break;
    9.             }
    10.         }
    11.         $NewArr[$m] = [
    12.             'MONTH' => $m,
    13.             'VALUE' => $price,
    14.         ];
    15.     }

    Код (Text):
    1. Вот итог
    2. array (
    3.   1 =>
    4.   array (
    5.     'MONTH' => '1',
    6.     'VALUE' => '200',
    7.   ),
    8.   2 =>
    9.   array (
    10.     'MONTH' => '2',
    11.     'VALUE' => '',
    12.   ),
    13.   3 =>
    14.   array (
    15.     'MONTH' => '3',
    16.     'VALUE' => '200',
    17.   ),
    18.   4 =>
    19.   array (
    20.     'MONTH' => '4',
    21.     'VALUE' => '',
    22.   ),
    23.   5 =>
    24.   array (
    25.     'MONTH' => '5',
    26.     'VALUE' => '350',
    27.   ),
    28.   6 =>
    29.   array (
    30.     'MONTH' => '6',
    31.     'VALUE' => '',
    32.   ),
    33.   7 =>
    34.   array (
    35.     'MONTH' => '7',
    36.     'VALUE' => '240',
    37.   ),
    38.   8 =>
    39.   array (
    40.     'MONTH' => '8',
    41.     'VALUE' => '240',
    42.   ),
    43.   9 =>
    44.   array (
    45.     'MONTH' => '9',
    46.     'VALUE' => '',
    47.   ),
    48.   10 =>
    49.   array (
    50.     'MONTH' => '10',
    51.     'VALUE' => '',
    52.   ),
    53.   11 =>
    54.   array (
    55.     'MONTH' => '11',
    56.     'VALUE' => '',
    57.   ),
    58.   12 =>
    59.   array (
    60.     'MONTH' => '12',
    61.     'VALUE' => '700',
    62.   ),
    63. )
     
  3. Михаил77

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

    С нами с:
    16 окт 2019
    Сообщения:
    31
    Симпатии:
    0


    Спасибо за внимание
    Немного не так

    Смысл заключается в том, что это разные годы

    PHP:
    1. <?
    2. $arrPrices = array(
    3. array("DATE" => "01.03.2015",  "MONTH" => "3", "VALUE" => "200"), /// 2015 год ///
    4. array("DATE" => "01.05.2015", "MONTH" => "5", "VALUE" =>"350"), /// 2015 год ///
    5. array("DATE" => "01.07.2015", "MONTH" => "7", "VALUE" => "240"), /// 2015 год ///
    6. array("DATE" => "01.12.2015", "MONTH" => "12", "VALUE" => "700"), /// 2015 год ///
    7. array("DATE" => "01.01.2016", "MONTH" => "1", "VALUE" => "200"), /// 2016 год ///
    8. array("DATE" => "01.03.2016", "MONTH" => "3", "VALUE" =>"350"), /// 2016 год ///
    9. array("DATE" => "01.08.2016", "MONTH" => "8", "VALUE" => "240"), /// 2016 год ///
    10. array("DATE" => "01.08.2016", "MONTH" => "8", "VALUE" => "280"), /// 2016 год ///
    11. );
    12. ?>
    порядок массива $arrPrices не должен нарущаться
    И если есть например два одинаковых месяца в одном году
    array("DATE" => "01.08.2016", "MONTH" => "8", "VALUE" => "240"), /// 2016 год ///
    array("DATE" => "01.08.2016", "MONTH" => "8", "VALUE" => "280"), /// 2016 год ///
    то они должны быть указаны оба

    Результат должен быть таким

    Код (Text):
    1.  
    2. array (
    3.   1 =>
    4.   array (
    5.     'MONTH' => '1',
    6.     'VALUE' => '',
    7.   ),
    8.   2 =>
    9.   array (
    10.     'MONTH' => '2',
    11.     'VALUE' => '',
    12.   ),
    13.   3 =>
    14.   array (
    15.     'MONTH' => '3',
    16.     'VALUE' => '200',
    17.   ),
    18.   4 =>
    19.   array (
    20.     'MONTH' => '4',
    21.     'VALUE' => '',
    22.   ),
    23.   5 =>
    24.   array (
    25.     'MONTH' => '5',
    26.     'VALUE' => '350',
    27.   ),
    28.   6 =>
    29.   array (
    30.     'MONTH' => '6',
    31.     'VALUE' => '',
    32.   ),
    33.   7 =>
    34.   array (
    35.     'MONTH' => '7',
    36.     'VALUE' => '240',
    37.   ),
    38.   8 =>
    39.   array (
    40.     'MONTH' => '8',
    41.     'VALUE' => '240',
    42.   ),
    43.   9 =>
    44.   array (
    45.     'MONTH' => '9',
    46.     'VALUE' => '',
    47.   ),
    48.   10 =>
    49.   array (
    50.     'MONTH' => '10',
    51.     'VALUE' => '',
    52.   ),
    53.   11 =>
    54.   array (
    55.     'MONTH' => '11',
    56.     'VALUE' => '',
    57.   ),
    58.   12 =>
    59.   array (
    60.     'MONTH' => '12',
    61.     'VALUE' => '700',
    62.   ),
    63.   13 =>
    64.   array (
    65.     'MONTH' => '1',
    66.     'VALUE' => '200',
    67.   ),
    68.   14 =>
    69.   array (
    70.     'MONTH' => '2',
    71.     'VALUE' => '',
    72.   ),
    73.   15 =>
    74.   array (
    75.     'MONTH' => '3',
    76.     'VALUE' => '350',
    77.   ),
    78.   16 =>
    79.   array (
    80.     'MONTH' => '4',
    81.     'VALUE' => '',
    82.   ),
    83.   17 =>
    84.   array (
    85.     'MONTH' => '5',
    86.     'VALUE' => '',
    87.   ),
    88.   18 =>
    89.   array (
    90.     'MONTH' => '6',
    91.     'VALUE' => '',
    92.   ),
    93.   19 =>
    94.   array (
    95.     'MONTH' => '7',
    96.     'VALUE' => '',
    97.   ),
    98.   20 =>
    99.   array (
    100.     'MONTH' => '8',
    101.     'VALUE' => '240',
    102.   ),
    103.   21 =>
    104.   array (
    105.     'MONTH' => '8',
    106.     'VALUE' => '280',
    107.   ),
    108.   22 =>
    109.   array (
    110.     'MONTH' => '9',
    111.     'VALUE' => '',
    112.   ),
    113.   23 =>
    114.   array (
    115.     'MONTH' => '10',
    116.     'VALUE' => '',
    117.   ),
    118.   24 =>
    119.   array (
    120.     'MONTH' => '11',
    121.     'VALUE' => '',
    122.   ),
    123.   25 =>
    124.   array (
    125.     'MONTH' => '12',
    126.     'VALUE' => '',
    127.   ),
    128. )
     
  4. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Ну тогда убери из ключа массив в моем примере
    вот так и тогда у тебя будут дублироваться

    PHP:
    1. $NewArr = [];
    2.     foreach($arrMonth as $item){
    3.         $m = $item['MONTH'];
    4.         $price = '';
    5.         foreach($arrPrices as $item2){
    6.             if($m == $item2['MONTH']){
    7.                 $price = $item2['VALUE'];
    8.                 break;
    9.             }
    10.         }
    11.         $NewArr[] = [
    12.             'MONTH' => $m,
    13.             'VALUE' => $price,
    14.         ];
    15.     }
     
  5. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Михаил77, вы в курсе, что означает словосочетание "обезьяна с гранатой"? В данном случае РНР выступает в роли гранаты. То что вы сейчас делаете потенциально опасно и далеко не только для вас. Я понимаю, что "блажен тот кто не ведает..." но не до такой же степени :(
     
  6. Михаил77

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

    С нами с:
    16 окт 2019
    Сообщения:
    31
    Симпатии:
    0

    Не работает
    Вот какой результат получается


    PHP:
    1. Array ( [0] => Array ( [MONTH] => 1 [VALUE] => 200 ) [1] => Array ( [MONTH] => 2 [VALUE] => ) [2] => Array ( [MONTH] => 3 [VALUE] => 200 ) [3] => Array ( [MONTH] => 4 [VALUE] => ) [4] => Array ( [MONTH] => 5 [VALUE] => 350 ) [5] => Array ( [MONTH] => 6 [VALUE] => ) [6] => Array ( [MONTH] => 7 [VALUE] => 240 ) [7] => Array ( [MONTH] => 8 [VALUE] => 240 ) [8] => Array ( [MONTH] => 9 [VALUE] => ) [9] => Array ( [MONTH] => 10 [VALUE] => ) [10] => Array ( [MONTH] => 11 [VALUE] => ) [11] => Array ( [MONTH] => 12 [VALUE] => 700 ) )
     
  7. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Михаил77, если массив цен отсортирован по датам и месяцам, то:
    PHP:
    1. $aResult = [];
    2. $year = false; $i = 1;
    3. foreach($arrPrices as $item) {
    4.     $timestamp = strtotime($item['DATE']);
    5.     $itemYear = date('Y', $timestamp);
    6.     if($year !== $itemYear) {
    7.         $year = $itemYear;
    8.         $aMonthItem = reset($arrMonth);
    9.     } elseif($aMonthItem['MONTH'] !== $item['MONTH']) {
    10.         $aMonthItem = next($arrMonth);
    11.     }
    12.     while($aMonthItem !== false && $aMonthItem['MONTH'] !== $item['MONTH']) {
    13.         $aResult[$i++] = ['MONTH' => $aMonthItem['MONTH'], 'VALUE' => ''];
    14.         $aMonthItem = next($arrMonth);
    15.     }
    16.     if($aMonthItem['MONTH'] == $item['MONTH']) {
    17.         $aResult[$i++] = ['MONTH' => $item['MONTH'], 'VALUE' => $item['VALUE']];
    18.     }
    19. }
    20. while(($aMonthItem = next($arrMonth)) !== false) {
    21.     $aResult[$i++] = ['MONTH' => $aMonthItem['MONTH'], 'VALUE' => ''];
    22. }
    Если не принципиально, чтобы результирующий массив начинался с индекса 1, то можно убрать использование переменной $i.
     
  8. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Sail, ништяк, ты ему ещё и чеку из гранаты выдернул :)
     
  9. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Осталось бросить или подорваться самому)
     
  10. Михаил77

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

    С нами с:
    16 окт 2019
    Сообщения:
    31
    Симпатии:
    0
    Спасибо, но немного не то

    результат должен быть такой
    Код (Text):
    1.  
    2.  
    3. array (
    4.   1 =>
    5.   array (
    6.     'MONTH' => '1',
    7.     'VALUE' => '',
    8.   ),
    9.   2 =>
    10.   array (
    11.     'MONTH' => '2',
    12.     'VALUE' => '',
    13.   ),
    14.   3 =>
    15.   array (
    16.     'MONTH' => '3',
    17.     'VALUE' => '200',
    18.   ),
    19.   4 =>
    20.   array (
    21.     'MONTH' => '4',
    22.     'VALUE' => '',
    23.   ),
    24.   5 =>
    25.   array (
    26.     'MONTH' => '5',
    27.     'VALUE' => '350',
    28.   ),
    29.   6 =>
    30.   array (
    31.     'MONTH' => '6',
    32.     'VALUE' => '',
    33.   ),
    34.   7 =>
    35.   array (
    36.     'MONTH' => '7',
    37.     'VALUE' => '240',
    38.   ),
    39.   8 =>
    40.   array (
    41.     'MONTH' => '8',
    42.     'VALUE' => '240',
    43.   ),
    44.   9 =>
    45.   array (
    46.     'MONTH' => '9',
    47.     'VALUE' => '',
    48.   ),
    49.   10 =>
    50.   array (
    51.     'MONTH' => '10',
    52.     'VALUE' => '',
    53.   ),
    54.   11 =>
    55.   array (
    56.     'MONTH' => '11',
    57.     'VALUE' => '',
    58.   ),
    59.   12 =>
    60.   array (
    61.     'MONTH' => '12',
    62.     'VALUE' => '700',
    63.   ),
    64.   13 =>
    65.   array (
    66.     'MONTH' => '1',
    67.     'VALUE' => '200',
    68.   ),
    69.   14 =>
    70.   array (
    71.     'MONTH' => '2',
    72.     'VALUE' => '',
    73.   ),
    74.   15 =>
    75.   array (
    76.     'MONTH' => '3',
    77.     'VALUE' => '350',
    78.   ),
    79.   16 =>
    80.   array (
    81.     'MONTH' => '4',
    82.     'VALUE' => '',
    83.   ),
    84.   17 =>
    85.   array (
    86.     'MONTH' => '5',
    87.     'VALUE' => '',
    88.   ),
    89.   18 =>
    90.   array (
    91.     'MONTH' => '6',
    92.     'VALUE' => '',
    93.   ),
    94.   19 =>
    95.   array (
    96.     'MONTH' => '7',
    97.     'VALUE' => '',
    98.   ),
    99.   20 =>
    100.   array (
    101.     'MONTH' => '8',
    102.     'VALUE' => '240',
    103.   ),
    104.   21 =>
    105.   array (
    106.     'MONTH' => '8',
    107.     'VALUE' => '280',
    108.   ),
    109.   22 =>
    110.   array (
    111.     'MONTH' => '9',
    112.     'VALUE' => '',
    113.   ),
    114.   23 =>
    115.   array (
    116.     'MONTH' => '10',
    117.     'VALUE' => '',
    118.   ),
    119.   24 =>
    120.   array (
    121.     'MONTH' => '11',
    122.     'VALUE' => '',
    123.   ),
    124.   25 =>
    125.   array (
    126.     'MONTH' => '12',
    127.     'VALUE' => '',
    128.   ),
    129. )
     
  11. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    И это самое "немного не то" будет продолжаться до бесконечности.
    Ну что же молодой человек, игнорируя мои советы вы сделали выбор. Надеюсь осознанный (хотя слабо на это рассчитываю).
    В свою очередь не люблю оставаться в долгу, поэтому больше меня в своих темах вы не увидите.
     
  12. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Михаил77, всё то. На исходные данные посмотрите. Откуда должна взяться пара 8 240 для 15-го года? :)
     
  13. Михаил77

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

    С нами с:
    16 окт 2019
    Сообщения:
    31
    Симпатии:
    0
    Наверное я Вам не совсем понятно изложил смысл, прошу посмотреть еще разок

    Вот массив месяцев

    PHP:
    1. <?
    2. $arrPrices = array(
    3. array("MONTH" => "1", "NAME" => "Январь"),
    4. array("MONTH" => "2", "NAME" =>"Февраль"),
    5. array("MONTH" => "3", "NAME" => "Март"),
    6. array("MONTH" => "4", "NAME" => "Апрель"),
    7. array("MONTH" => "5", "NAME" => "Май"),
    8. array("MONTH" => "6", "NAME" => "Июнь"),
    9. array("MONTH" => "7", "NAME" => "Июль"),
    10. array("MONTH" => "8", "NAME" => "Август"),
    11. array("MONTH" => "9", "NAME" => "Сентябрь"),
    12. array("MONTH" => "10", "NAME" => "Октябрь"),
    13. array("MONTH" => "11", "NAME" => "Ноябрь"),
    14. array("MONTH" => "12", "NAME" => "Декабрь")
    15. );
    16. ?>
    Вот массив цен

    PHP:
    1. <?
    2. $arrPrices = array(
    3. array("DATE" => "01.03.2015",  "MONTH" => "3", "VALUE" => "200"), /// 2015 год ///
    4. array("DATE" => "01.05.2015", "MONTH" => "5", "VALUE" =>"350"), /// 2015 год ///
    5. array("DATE" => "01.07.2015", "MONTH" => "7", "VALUE" => "240"), /// 2015 год ///
    6. array("DATE" => "01.12.2015", "MONTH" => "12", "VALUE" => "700"), /// 2015 год ///
    7. array("DATE" => "01.01.2016", "MONTH" => "1", "VALUE" => "200"), /// 2016 год ///
    8. array("DATE" => "01.03.2016", "MONTH" => "3", "VALUE" =>"350"), /// 2016 год ///
    9. array("DATE" => "01.08.2016", "MONTH" => "8", "VALUE" => "240"), /// 2016 год ///
    10. array("DATE" => "15.08.2016", "MONTH" => "8", "VALUE" => "280"), /// 2016 год ///
    11. );
    12. ?>
    По сути получается что в массиве цен содержится информация за два года,
    поэтому итоговый массив должен содержать 12 месяцев по 2015 году и 12 месяцев по 2016 году
    при этом август "8" в 2016 году повторяется 2 раза
    Результат должен быть таким

    Код (Text):
    1.  
    2. array (
    3.   1 =>
    4.   array (
    5.     'DATE' => '',
    6.     'MONTH' => '1',
    7.     'VALUE' => '',
    8.   ),
    9.   2 =>
    10.   array (
    11.     'DATE' => '',
    12.     'MONTH' => '2',
    13.     'VALUE' => '',
    14.   ),
    15.   3 =>
    16.   array (
    17.     'DATE' => '01.03.2015',
    18.     'MONTH' => '3',
    19.     'VALUE' => '200',
    20.   ),
    21.   4 =>
    22.   array (
    23.     'DATE' => '',
    24.     'MONTH' => '4',
    25.     'VALUE' => '',
    26.   ),
    27.   5 =>
    28.   array (
    29.     'DATE' => '01.05.2015',
    30.     'MONTH' => '5',
    31.     'VALUE' => '350',
    32.   ),
    33.   6 =>
    34.   array (
    35.     'DATE' => '',
    36.     'MONTH' => '6',
    37.     'VALUE' => '',
    38.   ),
    39.   7 =>
    40.   array (
    41.     'DATE' => '01.07.2015',
    42.     'MONTH' => '7',
    43.     'VALUE' => '240',
    44.   ),
    45.   8 =>
    46.   array (
    47.     'DATE' => '',
    48.     'MONTH' => '8',
    49.     'VALUE' => '',
    50.   ),
    51.   9 =>
    52.   array (
    53.     'DATE' => '',
    54.     'MONTH' => '9',
    55.     'VALUE' => '',
    56.   ),
    57.   10 =>
    58.   array (
    59.     'DATE' => '',
    60.     'MONTH' => '10',
    61.     'VALUE' => '',
    62.   ),
    63.   11 =>
    64.   array (
    65.     'DATE' => '',
    66.     'MONTH' => '11',
    67.     'VALUE' => '',
    68.   ),
    69.   12 =>
    70.   array (
    71.     'DATE' => '01.12.2015',
    72.     'MONTH' => '12',
    73.     'VALUE' => '700',
    74.   ),
    75.   13 =>
    76.   array (
    77.     'DATE' => '01.01.2016',
    78.     'MONTH' => '1',
    79.     'VALUE' => '200',
    80.   ),
    81.   14 =>
    82.   array (
    83.     'DATE' => '',
    84.     'MONTH' => '2',
    85.     'VALUE' => '',
    86.   ),
    87.   15 =>
    88.   array (
    89.     'DATE' => '01.03.2016',
    90.     'MONTH' => '3',
    91.     'VALUE' => '350',
    92.   ),
    93.   16 =>
    94.   array (
    95.     'DATE' => '',
    96.     'MONTH' => '4',
    97.     'VALUE' => '',
    98.   ),
    99.   17 =>
    100.   array (
    101.     'DATE' => '',
    102.     'MONTH' => '5',
    103.     'VALUE' => '',
    104.   ),
    105.   18 =>
    106.   array (
    107.     'DATE' => '',
    108.     'MONTH' => '6',
    109.     'VALUE' => '',
    110.   ),
    111.   19 =>
    112.   array (
    113.     'DATE' => '',
    114.     'MONTH' => '7',
    115.     'VALUE' => '',
    116.   ),
    117.   20 =>
    118.   array (
    119.     'DATE' => '01.08.2016',
    120.     'MONTH' => '8',
    121.     'VALUE' => '240',
    122.   ),
    123.   21 =>
    124.   array (
    125.     'DATE' => '15.08.2016',
    126.     'MONTH' => '8',
    127.     'VALUE' => '280',
    128.   ),
    129.   22 =>
    130.   array (
    131.     'DATE' => '',
    132.     'MONTH' => '9',
    133.     'VALUE' => '',
    134.   ),
    135.   23 =>
    136.   array (
    137.     'DATE' => '',
    138.     'MONTH' => '10',
    139.     'VALUE' => '',
    140.   ),
    141.   24 =>
    142.   array (
    143.     'DATE' => '',
    144.     'MONTH' => '11',
    145.     'VALUE' => '',
    146.   ),
    147.   25 =>
    148.   array (
    149.     'DATE' => '',
    150.     'MONTH' => '12',
    151.     'VALUE' => '',
    152.   ),
    153. )
     
  14. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Михаил77, появился индекс 'DATE' и итоговом массиве :)
    В 13-ю и 21-ю строчки замените на
    PHP:
    1. $aResult[$i++] = ['DATE' => '', 'MONTH' => $aMonthItem['MONTH'], 'VALUE' => ''];
    , а 17-ю на
    PHP:
    1. $aResult[$i++] = ['DATE' => $item['DATE'], 'MONTH' => $item['MONTH'], 'VALUE' => $item['VALUE']];
     
  15. Михаил77

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

    С нами с:
    16 окт 2019
    Сообщения:
    31
    Симпатии:
    0
    Так в итоге массив содержит 12 месяцев за 2015 год
    но не содержит 12 месяцев за 2016
     
  16. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    12 месяцев 16-го содержит. Завершающий цикл while это обеспечивает. Просто присмотритесь.
    Но был один нюанс с возможным отсутствием в исходных данных 12-го месяца в середине массива цен.
    PHP:
    1. $aResult = [];
    2. $year = false; $i = 1;
    3. foreach($arrPrices as $item) {
    4.     $timestamp = strtotime($item['DATE']);
    5.     $itemYear = date('Y', $timestamp);
    6.     if($year !== $itemYear) { // смена года
    7.         if($year !== false) { // если не первая смена год
    8.             while(($aMonthItem = next($arrMonth)) !== false) { // забить остаток
    9.                 $aResult[$i++] = ['DATE' => '', 'MONTH' => $aMonthItem['MONTH'], 'VALUE' => ''];
    10.             }
    11.         }
    12.         $year = $itemYear;
    13.         $aMonthItem = reset($arrMonth);
    14.     } elseif($aMonthItem['MONTH'] !== $item['MONTH']) {
    15.         $aMonthItem = next($arrMonth);
    16.     }
    17.     while($aMonthItem !== false && $aMonthItem['MONTH'] !== $item['MONTH']) {
    18.         $aResult[$i++] = ['DATE' => '', 'MONTH' => $aMonthItem['MONTH'], 'VALUE' => ''];
    19.         $aMonthItem = next($arrMonth);
    20.     }
    21.     if($aMonthItem['MONTH'] == $item['MONTH']) {
    22.         $aResult[$i++] = ['DATE' => $item['DATE'], 'MONTH' => $item['MONTH'], 'VALUE' => $item['VALUE']];
    23.     }
    24. }
    25. while(($aMonthItem = next($arrMonth)) !== false) {
    26.     $aResult[$i++] = ['DATE' => '', 'MONTH' => $aMonthItem['MONTH'], 'VALUE' => ''];
    27. }
     
  17. Михаил77

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

    С нами с:
    16 окт 2019
    Сообщения:
    31
    Симпатии:
    0


    КРУТОООО
    БОЛЬШОЕ ВАМ СПАСИБО
    то что нужно
    Вы нас выручили :)