微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何让php`json_encode`返回Javascript数组而不是Javascript对象?

我有一个PHP数组,其中包含一个对象列表:

// This is a var_dump of $data

array(3911) {
  [0]=>
  object(stdClass)#44 (3) {
    ["ID"]=>
    string(1) "1"
    ["name"]=>
    string(9) "Forest"
  }
  [1]=>
  object(stdClass)#43 (3) {
    ["ID"]=>
    string(1) "2"
    ["Name"]=>
    string(3) "Lt. Dan"
  }

  // etc ...
}

我正在将该数组转换为基于平面索引的数组:

$return = [];
$length = count($data);
$return = array_fill(0, $length, null);

// Convert list into flat array
foreach ( $data as $item ){
  $return[(int)$item->ID] = $item->name;
}

header( 'Content-Type: application/json' );
echo json_encode( $return );

我用json_encode获得的结果是一个对象列表:

{"0":null,"1":"Forest","2":"Lt. Dan","3":"Bubba","4":"Jenny"}

我期待得到的是:

[null,"Forest","Lt. Dan","Bubba","Jenny"]

如何让json_encode返回Javascript数组而不是Javascript对象?

旁注:The Manual says表示:

When encoding an array, if the keys are not a continuous numeric sequence starting from 0, all keys are encoded as strings, and specified explicitly for each key-value pair.

但我的数组是一个连续的集合,这就是我使用array_fill的原因.

解决方法:

如果您的ID不是连续的,那么count($data)将不会给出您要查找的结果.例如,如果$data有密钥1,2,3和5;然后array_fill只会在$return上给你0-3键,你最终会得到一个非顺序数组.

试试这个:

$return = [];
$length = max(array_keys($data));
$return = array_fill(0, $length, null);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐