2011-07-27 142 views
-3

我在php中合并了两个数组。这里是我的代码我在php的array_merge中遇到问题?

$message = array_merge($message2, $message1); 
echo json_encode($message); 

在这里我得到的数据,但在这里打印“0”和“1”

{"username":"ji5vajng","gender":"MALE","profilepic":"http:\/\/li336-153.members.linode.com\/services\/uploads\/users\/thumbs\/000000000000000Sunset.jpg","status":"1","nickname":"laddu","0":{"username":"i3vnbtcz","gender":"MALE","profilepic":"http:\/\/li336-153.members.linode.com\/services\/uploads\/users\/thumbs\/7BB46853-D79D-5E17-807F-FD0666AF21BBi3vnbtcz-2011-06-13 11:04:26 +0000.png","status":"1","nickname":"Cool"},"1":{"username":"oq5mjbvb","gender":"male","profilepic":"http:\/\/li336-153.members.linode.com\/services\/uploads\/users\/thumbs\/7BB46853-D79D-5E17-807F-FD0666AF21BBoq5mjbvb-2011-06-13 05:45:57 +0000.png","status":"1","nickname":""},"2":{"username":"ejzxm2oz","gender":"MALE","profilepic":"http:\/\/li336-153.members.linode.com\/services\/uploads\/users\/thumbs\/A0000015BAB1CAreceived_0.jpg","status":"1","nickname":"laddu"}} 
+7

可以提供一个例子 –

+1

0和1是你的数组索引!你总是可以通过改变你的数组并改变你的数组的键来改变它们。 – toopay

+0

iam在上面编辑我的代码。请参阅上面的代码 – narayana

回答

-1

你就不能的foreach它来获得阵列的价值,然后把一个json_encode吗?

foreach ($message as $value) { 
echo json_encode($value); 
} 
+1

这不会产生JSON数组,只是一堆JSON编码值,而不是你想要的。你不能再用JavaScript解析这个结果。 – KilZone

+0

@KillZone,我展示了问题提问人员如何才能达到的值,他想要的值,然后他需要遍历数组 – Orhan

+1

不,他希望JSON编码arary而不显示数字键,这可以像** hakre **所示那样完成。如果你想要JSON encode * only *值,你必须做'json_encode(array_values($ message))',而不是循环和编码各个值。 – KilZone

1

你描述的是json_encodeDocs正常行为,如果阵列具有字符串键是不是数字,数字键也将被编码。

$message1 = array('foo'); 
$message2 = array('key' => 'bar'); 

$message = array_merge($message2, $message1); 
echo json_encode($message); # {"key":"bar","0":"foo"} 

正如你可以看到那是json中的对象表示。

如果所有的键是数字,它们将不会被编码的一部分:

$message1 = array('foo'); 
$message2 = array('bar'); 

$message = array_merge($message2, $message1); 
echo json_encode($message); # ["bar","foo"] 

这是JSON的数组表达。

+1

注意:如果所有键均为数字*且连续并按*顺序排列,则JSON结果将为数组。试试'array(1 =>'foo',0 =>'bar')'... – deceze

+0

@deceze:['array_merge'](http://php.net/manual/en/function.array-merge。 PHP)照顾,如果输入数组只有数字键。你的信息通常是一个很好的提示,但它在上面的第二个代码示例中是* not *相关的​​,因为数字键将被'array_merge'重新编号 – hakre

0

我不认为这个结果有什么问题。因为你的合并阵列应该是...

(array(2)) '0' => array(username => 'foo',/* and so on */), 
      '1' => array(username => 'bar',/* and so on */)