我已经在某处储存了一系列水果。说它看起来像这样
$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"}]]}
每个水果哈希周围都有额外的方括号,我假设是因为我使用数组来存储每个键值对。
我如何获得所需的输出?
答案 0 :(得分:3)
你已经知道自己做错了什么。您正在创建一个数组,然后使用它来向其添加一个项目(另一个数组)。
// 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));
答案 1 :(得分:1)
您在数组中创建了一个额外的级别,只需在每次迭代中将一个新数组推送到$data
:
foreach ($myFruits as $key => $value) {
$data[]=array("name" => $key, "count" => $value);
}
*根据您的评论进行编辑