PHP |为什么array_push()添加“按每个值?

时间:2017-08-28 18:09:04

标签: php json

我尝试编写一个连接到多个服务器并获取子文件的api。 对于每个服务,我编写了一个额外的函数来提取数据并将其转换为json格式。

我也有一个函数结果将放入的数组。

myFunc1返回产生: {"KEY1":"foo","KEY2":"bar"}

myFunc2返回产生: {"VAL1":"foo","VAL2":"bar"}

比添加内容:

$jsondata = array("Func1"=>array(),"Func2"=>array());
$jsondata["Func1"][] = myFunc1();
$jsondata["Func2"][] = myFunc2();

如果我现在做json_encode($jsondata);,我会得到:

{"Func1":["{\"KEY1\":\"foo\",\"KEY2\":\"bar\"}"],"Func2":["{\"VAL1\":\"foo\",\"VAL2\":\"bar\"}"]

这几乎很好,但在{"Func1":["{\"KEY ":[之间的{\"K非常多。

PHP自动添加这个,但所以我的儿子无效,我不知道如何解决这个问题。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

那是因为您将myFunc1()作为JSON编码字符串插入数组中。尝试在myFunc1()myFunc2()中返回一个数组,然后在整个事件中返回json_encode()

如果您从其他地方获取JSON编码的字符串并在函数中返回它,那么json_decode()(以true作为参数)将其作为数组,而不是对象)像这样:

$jsondata = array("Func1"=>array(),"Func2"=>array());
$jsondata["Func1"][] = json_decode(myFunc1(), true);
$jsondata["Func2"][] = json_decode(myFunc2(), true);

答案 1 :(得分:0)

你的函数应该返回数组而不是字符串(作为json)

例如:

$jsondata["Func1"][] = ['KEY1'=>'foo','KEY2' => 'bar'];
$jsondata["Func2"][] = ['VAL1'=>'foo','VAL2' => 'bar'];

json_encode($jsondata);