Имеется массив:
$arr = [
['Саша', '100', '200', '300'],
['Петя', '100', '100', '100'],
['Настя', '200', '100', '50'],
['Настя', '150', '150', '150'],
['Саша', '50', '100', '150'],
['Саша', '200', '200', '200'],
];
Необходимо исключить повторения имён, а остальные данные объединить.
В итоге должно получиться так:
$arr = [
['Настя', '150, 200', '150, 100', '150, 50'],
['Петя', '100', '100', '100'],
['Саша', '50, 100, 200', '100, 200, 200', '150, 300, 200'],
];
Мое решение состоит в том, что я сначала создаю новый массив и заполняю его имеющимися данными, затем сортирую его и объединяю. Проблема состоит в последнем. Я пытаюсь делать через циклы и условия, но теряются данные (понимаю, что из-за for и того, что заново индексируем массив). Возможно, правильнее было бы использовать while, вместо if, но тогда появляется ошибка о не найденном ключе в массиве.
Код
$merge_array = $this->createArray($arr);
for($i = 0; $i < count($merge_array) - 1; $i++) {
if($merge_array[$i][0] == $merge_array[$i+1][0]) {
$merge_array[$i][0] = $merge_array[$i+1][0];
for($k = 1; $k < count($merge_array[$i]); $k++) {
$merge_array[$i][$k] = $merge_array[$i][$k] . ', ' . $merge_array[$i+1][$k];
}
unset($merge_array[$i+1]);
$merge_array = array_values($merge_array);
}
}
return $merge_array;
Как быть?