我一直想知道是否可以强制json_encode
返回Array
而不是Object
,同时仍然保持"整数"索引。
如果你要问的是一组用户名(他们的用户ID是数组中的键),我想要实现的目标。
所以,如果我在PHP中有这样的共同朋友列表:
1 => 'John Doe',
2 => 'Jane Doe',
5 => 'Oliver Natefield',
11 => 'Chris Cole'
我想使用json_encode
,我尝试了两种方法。
第一种方法是简单地将空白PHP数组添加到各自的索引(userID)中。
<?php
$list = array( );
foreach ( $friends as $userID => $name )
$list[ $userID ] = $name;
echo json_encode( $list );
?>
这让我感到遗憾Object
。好的,然后我尝试了其他的东西......
<?php
$list = array( );
foreach ( $users as $userID => $name )
array_splice( $list, $userID, 0, $name );
echo json_encode( $list );
?>
同样,失败了,这一次,它是Array
,但indexes
没有被考虑在内。
我知道......数组应该像:
undefined, // userID 0
'John Doe', // userID 1
'Jane Doe', // userID 2
undefined, // userID 3
undefined, // userID 4
'Oliver Natefield', // userID 5
undefined, //userID 6
undefined, // etc
但是......如果我的朋友userID
的索引为1504
,那么不应该有内存缺点吗?
虽然我们正在研究它,但我可以看到一组1000
未定义元素使用多少内存?这是相关的,因为如果它消耗太多内存,我只需要在特定username
之后搜索userID
的对象数组。
答案 0 :(得分:5)
这实际上是不可能的。它是Javascript语法的限制,基本上就是JSON。您无法在Javascript&#34;快捷方式&#34;中指定数组键。数组定义,就像你可以用PHP一样。 e.g。
$foo = array(1 => 'a', 10 => 'b');
JS中没有这样的符号,唯一允许的快捷方式是
foo = ['a', 'b'];
将为您提供等效的PHP 0 => 'a', 1 => 'b'
。要使用非顺序数组键,必须使用对象:
foo = {1: 'a', 10: 'b'};