@black_xe

Как объединить массив если есть совпадения?

Здравствуйте, подскажите пожалуйста как лучше сделать...
У меня есть N количество массивов:
$result['ITEMS'][0] = 
[
'ID' = 222,
'SORT' = 300,
'NAME' = 'NAME_1',
'GROUPS' = 21236
];

$result['ITEMS'][1] = 
[
'ID' = 333,
'SORT' = 300,
'NAME' = 'NAME_2',
'GROUPS' = 3213
];

$result['ITEMS'][2] = 
[
'ID' = 333,
'SORT' = 300,
'NAME' = 'NAME_2',
'GROUPS' = 21236
];


И такая фигня, что ID повторяется массива, т.е. элемент тот же самый, но из за того что GROUPS изменился, массив вылез как новый элемент.
Подскажите пожалуйста как мне перебрать весь $result['ITEMS'], но чтобы элементы массива не повторялись, а меняющийся ключ GROUPS просто записывался в один массив?

Итог вот что то такое должно быть:
$result['ITEMS'][0] = 
[
'ID' = 222,
'SORT' = 300,
'NAME' = 'NAME_1',
'GROUPS' = 21236
];

$result['ITEMS'][1] = 
[
'ID' = 333,
'SORT' = 300,
'NAME' = 'NAME_2',
'GROUPS' = [4234234, 234324, 23423]
];

$result['ITEMS'][2] = 
[
'ID' = 444,
'SORT' = 300,
'NAME' = 'NAME_2',
'GROUPS' = [21236, 1233, 43543]
];
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
$myFunc = function($acc, $item) {
	if (empty($acc[$item['ID']])) {
		$acc[$item['ID']] = $item;
		$acc[$item['ID']]['GROUPS'] = [$item['GROUPS']];
	} elseif (!in_array($item['GROUPS'], $acc[$item['ID']]['GROUPS'])) {
		$acc[$item['ID']]['GROUPS'][] = $item['GROUPS'];
	}

	return $acc;
};

$combined = ['ITEMS' => array_values(array_reduce($result['ITEMS'], $myFunc, []))];

https://ideone.com/fB28ZI
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Если ID у вас уникальное значение, то и делайте его ключом.
$result['ITEMS'][222] = 
[
'ID' = 222,
'SORT' = 300,
'NAME' = 'NAME_1',
'GROUPS' = [21236]
];
...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы