将 PHP 索引数组转换为关联 JSON

3

我有一个以下的PHP数组:

array("Apple", "Pear", "Grape", "Orange")

我希望获得以下JSON输出:

[[{"fruit":"Apple"}],[{"fruit":"Pear"}],[{"fruit":"Grape"}],[{"fruit":"Orange"}]]

JSON让我很困惑:(

编辑 对不起,输出结果中最后两个应该是水果,我已经更正了,对不起大家。


你的 JSON 是对象的数组的数组。你确定这是你想要的吗? - gen_Eric
1
你如何确定哪些数组项是“水果”,哪些是“标签”? - salathe
这是CakePHP中$javascript->object()输出的格式,也是FusionCharts所需的格式。真正的问题是如何将一个索引的PHP数组转换为具有相同键的关联PHP数组。 - Pyrite
@Pyrite: 你有两个不同的键。fruitlabel - gen_Eric
1
我刚意识到,那最后两个不应该说标签,而应该说水果,该死。 - Pyrite
5个回答

5
如果您想让您的JSON输出看起来像这样,您应该将您的PHP值更改为以下内容:
array(array(array('fruit' => 'Apple')), array(array('fruit' => 'Pear')), array(array('fruit' => 'Grape')), array(array('fruit' => 'Orange')))

然后将该数组传递给json_encode()


是的,我该如何将索引的PHP数组更改为具有相同键的关联PHP数组呢?这就是我不知道的。 - Pyrite
为了得到OP想要的JSON格式,你的数组应该是array(array(array('fruit' => 'Apple')),array(array('fruit' => 'Pear'))). - gen_Eric
已修复。不过我不确定 OP 想要将索引数组更改为具有相同键的关联数组。关联数组每个键只能有一个值,除非你将这些值变成数组或其他类型。 - Adam Fabicki

2
$fruit = array("Apple", "Pear", "Grape", "Orange");
$json = array();
foreach($fruit as $f){
  $json[][] = array('fruit' => $f);
}
echo json_encode($json);
// [[{"fruit":"Apple"}],[{"fruit":"Pear"}],[{"fruit":"Grape"}],[{"fruit":"Orange"}]]

1
OP有两个“水果”和两个“标签”,你只需要处理水果。 - Marc B
@Marc:哎呀,我没注意到。 - gen_Eric
@Marc:提问者已经修正了问题,现在所有的键都是“fruit”。 - gen_Eric
这对我来说可行,但是有没有一种不涉及循环的方法?因为我有很多这样的东西,而且我认为循环对性能来说是昂贵的。 - Pyrite
1
@Pyrite:循环并不那么耗费资源,而且我也想不出其他的方法。即使是内置的数组方法也会在内部使用循环。 - gen_Eric

1
你可以编写一个小函数,该函数接受索引数组和所需的键值,并输出所需的结构。
function associativify($array, $key) {
    $result = array();
    foreach ($array as $item) {
        $result[] = array(array($key => $item));
    }
    return $result;
}

$subject = array("Apple", "Pear", "Grape", "Orange");
$munged = associativify($subject, 'fruit');
$json   = json_encode($munged);

(顺便说一句:选择一个比我更好的函数名!)


我也想点赞,但那会使事情失衡。 - user481081

0

json_encode 是你要找的函数


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接