我已经生成了一个存储在某处的水果数组。比如它看起来像这样
$myFruits = array("apples"=>1, "oranges"=>3, "bananas"=>5);
这个数组然后被传递给一个函数,该函数将为API返回json编码的数据。
首先,我希望能够返回一个包含所有水果类型的列表
{"fruits":["apples", "oranges", "bananas"]}
我用这个来完成它
echo json_encode(array("scripts" => array_keys($scripts)));
现在,我希望每种类型的水果都包含在自己的哈希中,如
{"fruits":
[
{name: "apples"
},
{name: "oranges"
},
{name: "bananas"
]
}
这样,我可以添加额外的字段到每个水果对象,而不会破坏现有的代码,可能使用此API的以前版本(例如:如果我决定添加水果计数在那里,以及)。
看到我如何创建一个新的数组,并将我的水果列表分配给一个名为"fruits"的键,我尝试对每个内部哈希做同样的事情:
$myFruits = array("apples"=>1, "oranges"=>3, "bananas"=>5);
$data = array();
foreach ($myFruits as $key => $value) {
// initialize an associative array for each fruit
$val = array();
array_push($val, array("name" => $key));
// add it to the list of fruits
array_push($data, $val);
}
// assign list of fruits to "fruits" key
$outData = array("fruits" => $data);
echo json_encode($outData);
但是我得到了这个
{"fruits":[[{"name":"apples"}],[{"name":"oranges"}],[{"name":"bananas"}]]}
在每个水果散列周围有额外的方括号,我认为这是因为我使用了一个数组来存储每个键值对。
我如何得到我想要的输出?
你马上就知道你做错了什么了。您正在创建一个数组,然后使用它向其中添加一个项目(另一个数组)。
// initialize an associative array for each fruit
$val = array(); // this guy here is unnecessary!!
array_push($val, array("name" => $key));
// add it to the list of fruits
array_push($data, $val);
相反,只需将每个单独的数组直接压入$data
,就像这样:
array_push($data, array("name" => $key));
演示在数组中创建一个额外的级别,只需在每次迭代中将一个新数组推入$data
:
foreach ($myFruits as $key => $value) {
$data[]=array("name" => $key, "count" => $value);
}
*按您的评论编辑