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

У меня есть массив JSON из нескольких объектов, вот пример:

$people = [{"name":"John", "color":"green"},
{"name":"Mary", "color":"green"},
{"name":"Bob", "color":"red"}]

я использую json_decode($people, true) преобразовать их в массив …

Теперь скажем, я хочу объединить те, которые имеют одинаковые color, Я должен сделать array_merge_recursive($people[0], $people[1]) потому что они оба имеют green как color, Обратите внимание, что я должен указать, какие из них я хочу рекурсивно объединить.

Как я могу пройти через $people после того, как он был декодирован в формат массива и автоматически рекурсивно объединяет те, которые имеют одинаковое значение ключа?

Что-то вроде этого:

foreach($people as $person) {
// If a person has same color of previous
// person then merge them recursively.
}

Чтобы я мог получить это после зацикливания:

[{"name":"John, Mary", "color":"green, green"},
{"name":"Bob", "color":"red"}]

2

Решение

Сделайте результирующий массив ассоциативным массивом с ключом цвета.

$people_by_color = array();
foreach ($people as $person) {
if (isset($people_by_color[$person['color']])) {
$people_by_color[$person['color']]['name'] .= ', ' . $person['name'];
$people_by_color[$person['color']]['color'] .= ', ' . $person['color'];
} else {
$people_by_color[$person['color']] = $person;
}
}
$people_by_color = array_values($people_by_color); // Turn into indexed array
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]