За последние 24 часа нас посетил 22391 программист и 1060 роботов. Сейчас ищут 677 программистов ...

Как из двух массивов образовать новый, взяв часть данных?

Тема в разделе "PHP для новичков", создана пользователем Анастасия97, 10 май 2021.

  1. Анастасия97

    Анастасия97 Новичок

    С нами с:
    5 апр 2020
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте. Есть 2 массива.
    Первый:
    Код (Text):
    1. Array
    2. (
    3.     [0] => Array
    4.         (
    5.             [0] => Apple
    6.             [1] => big
    7.         )
    8.  
    9.     [1] => Array
    10.         (
    11.             [0] => Orange
    12.             [1] => medium
    13.         )
    14.  
    15.     [2] => Array
    16.         (
    17.             [0] => Orange
    18.             [1] => big
    19.         )
    20. )
    второй
    Код (Text):
    1. Array
    2. (
    3. [entries] => Array
    4.         (
    5.             [0] => Array
    6.                 (
    7.                     [name_item] => Apple
    8.                     [price_item] => 70
    9.                     [image_item] => img/apple45645.jpg
    10.                     [_id] => 608e9eb364323555fb0002b2
    11.                 )
    12.             [1] => Array
    13.                 (
    14.                     [name_item] => Orange
    15.                     [price_item] => 90
    16.                     [image_item] => img/ORANGE777.jpg
    17.                     [_id] => 6092bc293661377e0700007c
    18.                 )
    19.         )
    20. )
    Мне нужно добавить в первый массив данные из второго. Меня интересуют поля price_item и image_item, которые соответствуют имени массива. Проблема в том, что я не знаю, как достать содержимое, относительно искомого объекта. Ладно если бы у меня был ключ и я бы по нему искала и доставала содержимое, а здесь, в данной ситуации, у меня ступор. Такое вообще возможно?

    Итоговый массив я хотела получить вот такой:
    Код (Text):
    1. Array
    2. (
    3.     [0] => Array
    4.         (
    5.             [0] => Apple
    6.             [1] => big
    7.             [price_item] => 70
    8.             [image_item] => img/apple45645.jpg
    9.         )
    10.  
    11.     [1] => Array
    12.         (
    13.             [0] => Orange
    14.             [1] => medium
    15.             [price_item] => 90
    16.             [image_item] => img/ORANGE777.jpg
    17.         )
    18.  
    19.     [2] => Array
    20.         (
    21.             [0] => Orange
    22.             [1] => big
    23.             [price_item] => 90
    24.             [image_item] => img/ORANGE777.jpg
    25.         )
    26. )
     
  2. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    257
    Симпатии:
    19
    Вам из второго массива надо сделать массив вида:
    PHP:
    1. [
    2. 'name_item1' => [],
    3. 'name_item2' => [],
    4. ...
    5. ]
    И перебирая первый массив, по [0] => Apple , достанете дополнительную информацию
     
  3. twim32

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

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    У вас явная проблема с данными: во втором массиве не указан тип товара (medium, big). Это значит что либо большие и средние апельсины идут по одной цене, либо... сами разбирайтесь.

    Что-ж, я накидал рабочий пример. Сильно расписывать я не стал чтобы вы сами вникли.

    PHP:
    1. $a = [
    2.         [
    3.             'Apple',
    4.             'big',
    5.         ],
    6.         [
    7.             'Orange',
    8.             'medium',
    9.         ],
    10.         [
    11.             'Orange',
    12.             'big',
    13.         ],
    14.     ];
    15.  
    16. $b = [
    17.         [
    18.             'name_item' => 'Apple',
    19.             'price_item' => 70,
    20.             'image_item' => 'img/apple45645.jpg',
    21.             '_id' => '608e9eb364323555fb0002b2',
    22.         ],
    23.         [
    24.             'name_item' => 'Orange',
    25.             'price_item' => 90,
    26.             'image_item' => 'img/ORANGE777.jpg',
    27.             '_id' => '6092bc293661377e0700007c',
    28.         ],
    29.     ];
    30.  
    31. $result = [];
    32.  
    33. foreach($b as $p) {
    34.     // Находим товары с похожим именем
    35.     $found = array_filter($a, function($o) use($p) {
    36.         return $o[0] === $p['name_item'];
    37.     });
    38.  
    39.     if(count($found) > 0) { // если товары найдены, то добавляем в массив
    40.         foreach($found as $f) {
    41.             $r = [
    42.                 $f[0],
    43.                 $f[1],
    44.                 $p['price_item'],
    45.                 $p['image_item'],
    46.                 ];
    47.              
    48.             $result[] = $r;
    49.         }
    50.     }
    51. }
    52.  
    53. var_dump($result);