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

Объединение массивов PHP

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

  1. Михаил77

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

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

    Прошу помочь объединить два массива без увеличения количества ключей.

    $arrayOne = array (
    array ("DATE" => "2010", "VALUE" => "50"),
    array ("DATE" => "2011", "VALUE" => "60"),
    array ("DATE" => "2012", "VALUE" => "70"),
    );

    $arrayTwo = array (
    array ("DATE" => "2010", "PRICE" => "30"),
    array ("DATE" => "2011", "PRICE" => "35"),
    array ("DATE" => "2012", "PRICE" => "40"),
    );

    Если использовать array_merge и произвести сортировку, массив объединяется с увеличением количества ключей
    $array = array_merge ($arrayOne, $arrayTwo);

    $array = array (
    array ("DATE" => "2010", "VALUE" => "50"),
    array ("DATE" => "2010", "PRICE" => "30"),
    array ("DATE" => "2011", "VALUE" => "60"),
    array ("DATE" => "2011", "PRICE" => "35"),
    array ("DATE" => "2012", "VALUE" => "70"),
    array ("DATE" => "2012", "PRICE" => "40"),
    );

    Нужно чтобы массив был объединен без увеличения количества ключей,
    по дате, в обоих массивах даты одинаковые.

    $array = array (
    array ("DATE" => "2010", "VALUE" => "50", "PRICE" => "30"),
    array ("DATE" => "2011", "VALUE" => "60", "PRICE" => "35"),
    array ("DATE" => "2012", "VALUE" => "70", "PRICE" => "40"),
    );

    Заранее благодарю!
     
  2. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Если года могут быть в разнобой, или вот втором массиве может отсутствовать год из первого, то так:
    PHP:
    1. <?php
    2. $arrayOne = array (
    3. array ("DATE" => "2010", "VALUE" => "50"),
    4. array ("DATE" => "2011", "VALUE" => "60"),
    5. array ("DATE" => "2012", "VALUE" => "70"),
    6. array ("DATE" => "2019", "VALUE" => "1000"),
    7. );
    8.  
    9. $arrayTwo = array (
    10. array ("DATE" => "2011", "PRICE" => "30"),
    11. array ("DATE" => "2012", "PRICE" => "35"),
    12. array ("DATE" => "2010", "PRICE" => "40")
    13. );
    14.  
    15. $result = [];
    16.  
    17. foreach ($arrayOne as $key => $value)
    18. {
    19.   $k = array_search($value['DATE'], array_column($arrayTwo, 'DATE'));
    20.  
    21.   if($key !== false)
    22.   {
    23.     $result[$key] = [
    24.       'DATE' => $value['DATE'],
    25.       'VALUE' => $value['VALUE'],
    26.       'PRICE' => $arrayTwo[$k]['PRICE']
    27.     ];
    28.   }
    29. }
    30. print_r($result);
     
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    array_replace_recursive
    --- Добавлено ---
    При условии, что порядок в исходных массивах совпадает.
     
  4. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @Михаил77 а вообще такие проблемы появляются когда у вас два sql запроса, это так?
     
  5. Михаил77

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

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


    Огромное Вам спасибо
    Попытался еще сам слепить вот что получилось

    <?
    foreach ($arrayOne as $key => $element)
    {
    $result[$key] = array (
    "DATE" => $arrayOne[$key]["DATE"],
    "VALUE" => $arrayOne[$key]["VALUE"],
    "PRICE" => $arrayTwo[$key]["PRICE"],
    );
    }
    print_r($result);
    ?>

    Но Ваш вариант безусловно круче :)
    --- Добавлено ---

    Два запроса в два разных XML файла которые необходимо объединить и вывести на графике в виде двух кривых в одинаковом периоде
    --- Добавлено ---


    Два запроса в два разных XML файла которые необходимо объединить и вывести на графике в виде двух кривых в одинаковом периоде
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Нужно смотреть не по крутости, а по назначению. Достаточно ли тупого слияния или обязательно нужно интеллектуальное?
     
  7. Михаил77

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

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

    Задача просто соединить по ключу чтобы в одном ключе и дате были оба значения и PRICE и VALUE
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Т.е. вы не уверены, что соответствие и порядок будут соблюдаться? Тогда, да, нужно более интеллектуальное слияние.

    На вашем же примере array_replace_recursive должна работать на ура.
    --- Добавлено ---
    В данном случае лучше говорить «по общему элементу».