Объединить значения с одинаковыми id

112
24 января 2021, 06:40

Нужно объединить значения с одинаковыми id. Есть массив:

$data = Array (
0 => Array ('id' => 11, 'description' => Array(Array('text' => 'yellow'))), 
1 => Array ('id' => 11, 'description' => Array(Array('text' => 'red'))), 
2 => Array ('id' => 22, 'description' => Array(Array('text' => 'green'))), 
);

Нужно получить:

$data = Array (
0 => Array ('id' => 11, 'description' => Array(Array('text' => 'yellow, red'))), 
1 => Array ('id' => 22, 'description' => Array(Array('text' => 'green'))), 
);

Подскажите, пожалуйста, как это можно реализовать?

Answer 1

Можно воспользоваться техникой reduce-map:

  1. С помощью array_reduce группируете одинаковые записи, агрегируя необходимые данные нужным образом.
  2. С помощью array_map формируете необходимый итоговый формат(implode cобранного массива текстов, например)

Пример с чуть более простой структурой:

$data = [
 ['id' => 111, 'text' => 'yellow'],
 ['id' => 111, 'text' => 'red'],
 ['id' => 112, 'text' => 'green'],
];
$result = array_map(function($item) {return [
    'id' => $item['id'],
    'text' => implode(', ', $item['colors']),
];}, array_reduce($data, function($reduced, $item){
    if (!isset($reduced[$item['id']])) $reduced[$item['id']] = $item;
    $reduced[$item['id']]['colors'][] = $item['text'];
    return $reduced;
}, []));

3v4l demo

Answer 2

Так не делают

$data=array(
    array("id"=>"111","description"=>array(array(
          "text"=>"голубой"))
    ),
    array("id"=>"111","description"=>array(array(
          "text"=>"желтый"))
    ),
    array("id"=>"112","description"=>array(array(
          "text"=>"yellow"))
    ),
    array("id"=>"112","description"=>array(array(
          "text"=>"green"))
    ));
foreach ($data as $key => $value) {
    $ser=$value['id'];
for($i = 1; $i<count($data); $i++){
if($ser==$data[$i]['id']){
    array_push($data[$i-1]['description'][0],$value['description'][0]['text'] );
}
}
}
print_r($data);
READ ALSO
Авторизация по ролям php mysql

Авторизация по ролям php mysql

Есть страничка авторизации и база данных

201
Вывод изображения в письме товара prestashop

Вывод изображения в письме товара prestashop

нужна помощь знатока prestashopВозможно есть где то информация или кто то может помочь, в том как можно вывести в письме (в котором выводиться...

100