在PHP中使用json编码之前的array_merge

时间:2015-01-05 12:22:45

标签: php json

$myArray = array();

for($i=0;i<2;$i++){
..
.. //get the content logic here

assign it to array
$myArray["item"]["content"] = $item_content;
}
echo json_encode($myArray);

上面的代码产生了这个结果:

enter image description here

哪个错误,因为我没有将它们合并。

我试图像这样合并:

$finalJson = array_merge($finalJson, $myArray); 

echo $finalJson的输出是一个对象而不是3.

3 个答案:

答案 0 :(得分:1)

更新

您的真实问题归结为您在关联数组上使用array_mergearray_merge的行为是重新分配重复密钥(如果它们是关联的)(cf the docs):

  

如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个键。但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会附加。

由于$myArray显然正在使用字符串作为键,因此$finalJson中的值将被重新分配。您需要做的是在每次迭代时创建唯一键,或者只是将$myArray的值推送到数字索引$finalJson数组(就像我在下面的原始答案中所示)


问题很简单:

$myArray["item"]["content"] = $item_content;

它在循环内部,每次重新分配$myArray["item"]["content"]的值,而不是将其添加到数组中。我怀疑你想要做的是在循环的底部添加它(对于$myArray的每个新值):

$finalJson[] = $myArray;

然后,在下一次迭代中,$myArray将被重新分配,其新值将附加到$finalJson变量。

答案 1 :(得分:0)

我有一个棘手的问题。

我做什么。 我从数据库的系统表(DEV,测试产品设置)中生成表的信息,使用PHP来触发…并比较结果,以查看与JavaScript的区别。

我还有一个文档数据库,用于获取其他业务信息,该数据库仅在TEST数据库上安装一次。

因此,我需要连接所有四个环境以获取数据。

我用 如果($ flag ==='i')

 for information DB and

elseif ($flag === 's')  

用于系统数据库。

结果是$ row_array和$ info_array,必须将它们组合起来,然后将其发送回Javascript。

$json_response =   array_merge($rinfo, $rsql );    

echo json_encode($json_response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);    

我尝试在程序的其他位置进行此合并。

第一次来
elseif($ flag ==='i'){

结果json:

    [
    {
        "0": "ACT",……….
    } ][ ]        

second time after   }  //ifelse return also 2 arrays

    [{"0":"ACT","1":"Tabelle Akten","2":"hh","3":null,"4":null,"5":"UCC","6":"Y","7":"Reload Data in Test","8":"y","9":"delete all older tha","10":"n","11":" ","12":"y","13":" ","14":"o","15":"y","16":"o","17":"y","18":"y","19":"Diese tabelle speichert die Acten Verweise","20":"Gert Dorn","21":1570254359,"TDESCRIPTION":"n","TTYPE":" ","TREC_ESTIM":"y","TREC_GROWTH":" ","TDOMAIN":"o","TREL_TYPE":"y","TREL_RULES":"o","THOUSEKEEPING":"y","THOUSE_RULES":"y","TCID":"Diese tabelle speichert die Acten Verweise","TCID_RULES":"Gert Dorn","TUSE_UCC":1570254359,"TUSE_DWH":"","TUSE_ODS":"","TUSE_CWF":"","TUSE_IWF":"","TUSE_OWF":"","TUSE_DEP_MANAGER":"","TENTITY_DESCRIPTION":"","TOWNER":""

,"TTIMESTAMP":""**}][{**"0":"ACT","1":"DB2INST1"

,"2":"USERSPACE1","3":null,"4":"2018-11-21 16:43:20.066567","5":"2018-12-07 10:12:10.255759","6":null,"7":"2020-03-26","8":"2018-11-21 16:43:20.343258","9":3,"NAME":"ACT","CREATOR":"DB2INST1","TBSPACE":"USERSPACE1","REMARKS":"","CTIME":"2018-11-21 16:43:20.066567","STATS_TIME":"2018-12-07 10:12:10.255759","STATISTICS_PROFILE":"","LASTUSED":"2020-03-26","ALTER_TIME":"2018-11-21 16:43:20.343258","COLCOUNT":3}]    

您可以从

下载的程序代码和结果

http://dmdg.io/dmdg.zip

希望您能帮到亲切的问候

答案 2 :(得分:-1)

你考虑过使用array_push吗?

array_push总是比myArray [] = $ value

更受欢迎