很难用php关联数组,数字不会打印?

时间:2014-02-07 22:39:26

标签: php arrays json

我很尴尬地问这个,因为它看起来很容易。原谅我。

以下php:

<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);

$data = array();
for($x=0;$x<$arrlength;$x++)
  {
    $data[(string)$x]=$cars[$x];
  }
  var_dump($data);
  echo json_encode($data);
?>

给我这个:

array(3) {
  [0]=>
  string(5) "Volvo"
  [1]=>
  string(3) "BMW"
  [2]=>
  string(6) "Toyota"
}
["Volvo","BMW","Toyota"]

转储看起来很棒,但是当我编码它时,它会消失,

但是当我做$data[$cars[$x]] = $x;时,我会得到与我想要的相反的信息

array(3) {
  ["Volvo"]=>
  int(0)
  ["BMW"]=>
  int(1)
  ["Toyota"]=>
  int(2)
}
{"Volvo":0,"BMW":1,"Toyota":2}

但是这个数字在JSON中显示了我真正想要的是:

{0:"Volvo", 1:"BMW", 2:"Toyota"}

3 个答案:

答案 0 :(得分:2)

有一种更简单的方法:

<?php
    $cars=array("Volvo","BMW","Toyota");
    $data = json_encode($cars, JSON_FORCE_OBJECT));
    print_r($data);
?>

将打印:

{"0":"Volvo","1":"BMW","2":"Toyota"}

编辑:要获得您所要求的内容,您需要做两件事:(1)从1开始获取数组元素; (2)将整个数组作为索引cars的值。使用索引1启动数组的一种方法是使用第一个(索引0)元素定义一个数组,然后取消该数组。这将删除现有元素,但不会重新定义数组的其余部分。你的代码看起来像这样:

<?php
    $cars=array("","Volvo","BMW","Toyota");
    unset($cars[0]);
    $data = json_encode(array("cars" => $cars), JSON_FORCE_OBJECT);
    print_r($data);
?>

这将产生

{"cars":{"1":"Volvo","2":"BMW","3":"Toyota"}}

我真的不知道为什么你需要把这个东西作为数组的元素本身,但是你可以在输出周围加上方括号,就像通过创建对象/数组然后json_encode'来获取它一样。这将是非常痛苦的:

$data = "[" . json_encode(array("cars" => $cars), JSON_FORCE_OBJECT) . "]";

答案 1 :(得分:2)

你想要的是JSON编码对象。这可以通过以下代码实现:

$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);

$data = new StdClass;
for ($x=0; $x<$arrlength; $x++) {
    $data->{(string)$x} = $cars[$x];
}

echo json_encode($data);

答案 2 :(得分:1)

可用于控制行为的

json_encode has a second (optional) parameter,您正在寻找JSON_FORCE_OBJECT,可以像这样使用:

$cars=array("Volvo","BMW","Toyota");
print json_encode($cars, JSON_FORCE_OBJECT);

{"0":"Volvo","1":"BMW","2":"Toyota"}