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

Анастасия97

Здравствуйте. Есть 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. )
 

Дюран

Вам из второго массива надо сделать массив вида:

PHP:
  1. [
  2. ‘name_item1’ => [],
  3. ‘name_item2’ => [],
  4. ]

И перебирая первый массив, по [0] => Apple , достанете дополнительную информацию

 

twim32

У вас явная проблема с данными: во втором массиве не указан тип товара (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);
 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *