如何在php

时间:2017-03-21 14:32:18

标签: php arrays json string

我有两个json数组a和b。目的是将它组合成一个,作为" a"在数据库和" b"来自输入表单,用数据库数组添加表单数组,并在db。中维护格式。

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

我的目标是得到类似的东西" c"

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

我做了一个合并功能,得到了[" A"," V"," C"," X",&#34 ; 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)));

5 个答案:

答案 0 :(得分:1)

$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($a,$b));

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));

array_merge_recursive永远不会跳过相同的索引

array_merge将跳过相同的索引

答案 1 :(得分:0)

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)));

答案 2 :(得分:0)

如果你的json字符串有数字键:

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_keys和array_values获取键和值。然后使用array_map为每个键添加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"}

如果不是数字键,请在array_merge之前使用array_values。

如果要删除副本,请在array_merge之后使用array_unique。

答案 3 :(得分:0)

你要做的事情是不寻常的,我认为你必须编写比你想要的更多的代码来获得你想要的东西。

一方面,你希望键是字符串标识符而不是数字(你不喜欢array_merge给你的那些)但是在另一个层次上你希望它们被重写以按顺序继续整数索引的方式。

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

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

答案 4 :(得分:0)

这可能会对您有所帮助:


    $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);