PHP-组合具有相同键值的数组
我有一个包含多个对象的JSON数组,下面是一个示例:PHP-组合具有相同键值的数组,php,arrays,json,object,merge,Php,Arrays,Json,Object,Merge,我有一个包含多个对象的JSON数组,下面是一个示例: $people = [{"name":"John", "color":"green"}, {"name":"Mary", "color":"green"}, {"name":"Bob", "color":"red"}] 我使用json\u decode($people,true)将它们转换为数组 现在让我们假设我想要组合那些具有相同颜色的。我必须做array\u merge\u recursi
$people = [{"name":"John", "color":"green"},
{"name":"Mary", "color":"green"},
{"name":"Bob", "color":"red"}]
我使用json\u decode($people,true)
将它们转换为数组
现在让我们假设我想要组合那些具有相同颜色的。我必须做array\u merge\u recursive($people[0],$people[1])
,因为它们都有green
作为颜色。注意,我必须指定要递归合并的对象
在将$people
解码为数组格式并自动递归合并具有相同键值的键值后,如何循环遍历$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
使用键为颜色的关联数组。这非常有效,谢谢!顺便说一句,您在if
语句中遗漏了一个括号。我删除了名称
后面的颜色
行,因为我真的不想组合两个相同的值,我只是想,无论是否递归使用array\u merge\u
,它都会组合它们。