У меня есть массив 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"}]
Сделайте результирующий массив ассоциативным массивом с ключом цвета.
$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
Других решений пока нет …