强制json_encode返回数组而不是对象

时间:2015-03-10 20:48:26

标签: php arrays json

我一直想知道是否可以强制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的对象数组。

1 个答案:

答案 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'};