我很尴尬地问这个,因为它看起来很容易。原谅我。
以下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"}
答案 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"}