如何在php中合并两个json数组或字符串

如何在php中合并两个json数组或字符串,php,arrays,json,string,Php,Arrays,Json,String,我有两个json数组a和b。目的是将其合并为一个,因为“a”在数据库中,“b”来自输入表单,以便将表单数组与数据库数组一起添加,并在数据库中维护格式 a={“1”:“a”,“2”:“V”,“3”:“C”} b={“1”:“X”,“2”:“XL”,“3”:“XM”,“4”:“L”} 我的目标是得到像这样的“c” c={“1”:“A”,“2”:“V”,“3”:“c”,“4”:“X”,“5”:“XL”,“6”:“XM”,“7”:“L”} 我做了一个合并函数,得到了非常接近的[“a”,“V”,“C”,“

我有两个json数组a和b。目的是将其合并为一个,因为“a”在数据库中,“b”来自输入表单,以便将表单数组与数据库数组一起添加,并在数据库中维护格式

a={“1”:“a”,“2”:“V”,“3”:“C”} b={“1”:“X”,“2”:“XL”,“3”:“XM”,“4”:“L”}

我的目标是得到像这样的“c”

c={“1”:“A”,“2”:“V”,“3”:“c”,“4”:“X”,“5”:“XL”,“6”:“XM”,“7”:“L”}

我做了一个合并函数,得到了非常接近的[“a”,“V”,“C”,“X”,“XL”,“XM”,“L”]

$a= '{"1":"A","2":"V","3":"C"}';
$b = $_POST['a'];// '{"1":"X","2":"XL","3":"XM","4":"L"}'
            echo $c = json_encode(array_merge(array_filter($a),json_decode($b, true)));

Array_push会将元素添加到末尾:

$a= '{"1":"A","2":"V","3":"C"}';
$b = $_POST['a'];// '{"1":"X","2":"XL","3":"XM","4":"L"}'
            echo $c = json_encode(array_push(array_filter($a),json_decode($b, true)));
json_decode将返回stdObject

若要从json字符串中获取数组,需要将true作为第二个参数传递,以获取数组格式的值


编辑

$a = '{"1":"A","2":"V","3":"C"}';
$b = '{"1":"X","2":"XL","3":"XM","4":"L"}';

$a = json_decode($a,true);
$b = json_decode($b,true);


print_r(array_merge_recursive($a,$b));
数组\u merge\u recursive永远不会跳过相同的索引


如果json字符串具有数字键,则array_merge将跳过相同的索引:

echo json_encode((object)(array_merge(json_decode('{"1":"A","2":"V","3":"C"}', true), json_decode('{"1":"X","2":"XL","3":"XM","4":"L"}', true))));
此键从0开始,如果要从1开始,请使用array_键和array_值获取键和值。然后使用数组映射为每个键添加1。最后使用array_combine从1获得数组索引

$array = array_merge(json_decode('{"1":"A","2":"V","3":"C"}', true), json_decode('{"1":"X","2":"XL","3":"XM","4":"L"}', true));
$keys = array_map(function($v){return $v + 1;}, array_keys($array));
$values = array_values($array);
echo json_encode((object)array_combine($keys, $values));
结果:

{"1":"A","2":"V","3":"C","4":"X","5":"XL","6":"XM","7":"L"}
如果不是数字键,请在数组\u合并之前使用数组\u值


如果要删除重复项,请在array\u merge之后使用array\u unique。

您尝试执行的操作是不寻常的,我认为您必须编写比您希望的多得多的代码才能完全获得所需的内容

一方面,您希望键是字符串标识符,而不是数字(您不喜欢
array\u merge
提供给您的内容),但另一方面,您希望它们被重写,以继续整数索引的顺序

这种设计选择对您来说可能是必要的,但它会花费您很多钱,因为大多数标准数组函数都无法按您希望的方式工作。在这种情况下,您需要自己编写大量代码,而不是使用预先构建、经过验证且快速的库函数


我建议您仔细检查在索引中需要这种非标准方法的原因,看看是否最好更改它。

这可能会对您有所帮助:

$a = '{"1":"A","2":"V","3":"C"}'; $b = '{"1":"X","2":"XL","3":"XM","4":"L"}'; $c = array_merge(array_filter(json_decode($a,true)),json_decode($b, true)); foreach($c as $key => $value){ $d[$key+1] = $value; } echo json_encode($d); $a='{“1”:“a”,“2”:“V”,“3”:“C”}'; $b='{“1”:“X”,“2”:“XL”,“3”:“XM”,“4”:“L”}'; $c=array_merge(array_filter(json_decode($a,true)),json_decode($b,true)); foreach($c作为$key=>$value){ $d[$key+1]=$value; } echo json_编码($d);
这仍然返回与相同的结果mine@EmeldaOnn答:更新请检查并让我知道这与我的牙库完全相同,你看,它工作,但从0开始计数,让它从1开始,就像我的样本c,c={“1”:“A”,“2”:“V”,“3”:“c”,“4”:“X”,“5”:“XL”,“6”:“XM”,“7”:“L”}@EmeldaOnn现在检查它。这是惊人的,完美的,问题解决了!给你一杯咖啡,兄弟! $a = '{"1":"A","2":"V","3":"C"}'; $b = '{"1":"X","2":"XL","3":"XM","4":"L"}'; $c = array_merge(array_filter(json_decode($a,true)),json_decode($b, true)); foreach($c as $key => $value){ $d[$key+1] = $value; } echo json_encode($d);