如何根据id值合并两个PHP数组?
PHP 根据ID合并两个数组(包含所有ID)
要实现按id合并两个数组并保留所有ID,缺失字段设为null,可以按照以下步骤操作:
1. 定义原始数组
$array1 = [ ['id' => '1', 'color'=>'Green'], ['id' => '2', 'color'=>'Red'], ['id' => '3', 'color'=>'Blue'], ]; $array2 = [ ['id' => '2', 'size'=>'Small'], ['id' => '3', 'size'=>'Medium'], ['id' => '4', 'size'=>'Large'], ];
2. 转换为以ID为键的关联数组
使用array_column将两个数组转换为以id作为键的结构,方便快速通过ID访问对应数据:
$keyedArray1 = array_column($array1, null, 'id'); $keyedArray2 = array_column($array2, null, 'id');
3. 获取所有唯一ID
合并两个数组的ID并去重,确保所有ID都被包含:
$allIds = array_unique(array_merge(array_keys($keyedArray1), array_keys($keyedArray2))); // 按ID升序排序(可选,匹配示例结果的顺序) sort($allIds);
4. 遍历ID生成最终数组
逐个处理每个ID,合并两个数组中的数据,缺失字段用null填充:
$result = []; foreach ($allIds as $id) { $result[] = [ 'id' => $id, 'color' => $keyedArray1[$id]['color'] ?? null, 'size' => $keyedArray2[$id]['size'] ?? null, ]; }
最终结果
执行print_r($result)会输出:
Array ( [0] => Array ( [id] => 1 [color] => Green [size] => ) [1] => Array ( [id] => 2 [color] => Red [size] => Small ) [2] => Array ( [id] => 3 [color] => Blue [size] => Medium ) [3] => Array ( [id] => 4 [color] => [size] => Large ) )
说明
array_column:高效将数组转换为指定键的关联数组,PHP 5.5+支持。?? null:空合并运算符,PHP 7+支持,当对应键不存在时返回null,替代繁琐的isset()判断。- 排序步骤可选,如果不需要ID顺序可以省略
sort($allIds)。
内容的提问来源于stack exchange,提问作者user606336
相关产品推荐
相关产品推荐

