Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-组合具有相同键值的数组_Php_Arrays_Json_Object_Merge - Fatal编程技术网

PHP-组合具有相同键值的数组

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

我有一个包含多个对象的JSON数组,下面是一个示例:

$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
,它都会组合它们。