我相信我一直在编写一些效率低下的代码,但似乎无法找到一种更有效的编写方式。
这经常发生在json输出中,尽管我也遇到了一些html或xml输出的问题。
我在我的数据库中运行一个查询,它返回一个数组。说一个人最喜欢的食物。 php的mysql_fetch_assoc返回
Array([person]=>john [food]=>chocolate) Array([person]=>john [food]=>pizza) Array([person]=>john [food]=>coffee) Array([person]=>susan [food]=>licorice)
要创建我的json或html,我一直在寻找独特的人,然后添加这样的食物
$jsonOut='' $personAdd=''; while($gotArray=mysql_fetch_assoc(foodArray)){ if($personAdd!='$gotArray['person']){ $jsonOut.="person: $gotArray['person'], foods{"; } $jsonOut.="food:$gotArray['food'],"; rtrim(jsonOut,','); $jsonOut.="}"; $personAdd=$array['person']; }
现在,当你只有一个在mysql响应中不断重复的值时,这不是什么大不了的事,但是当你开始有4或5列的值相同时,它开始变得非常冗长。
有更好的方法吗?
-------------澄清输出应该是什么样的----------------- 上述数组的最终json应如下所示
[ { "person": "john", "foods": [ { "food": "chocolate", "food": "pizza", "food": "coffee" } ] }, { "person": "susan", "food": "licorice" } ]
或苏珊会有“食物”:[{“food”:“licorice”}]类似的东西。
答案 0 :(得分:5)
使用json_encode:
$persons = array ();
while ($row = mysql_fetch_assoc($result))
{
if (empty($persons[$row['person']]))
$persons[$row['person']] = array ();
array_push ($persons[$row['person']], $row['food']);
}
echo json_encode ($persons);
它应该导致以下结果:
{
'john': [
'chocolate',
'pizza',
'coffee'
],
'susan': [
'licorice'
]
}
希望这有帮助
答案 1 :(得分:1)
这有点像kludge,但是使用mysql的帮助来寻找更快一点的方法就是使用这个查询:
SELECT person, GROUP_CONCAT(food) AS foods FROM table GROUP BY person
然后你有一个字符串用于你可以分成数组的食物
$persons = [];
while($person = mysql_fetch_assoc(foodArray)){
$person['foods'] = explode(", ", $person['foods']);
array_push($persons, $person);
}
$jsonOut = json_encode($persons);
更简单,即使它有点像黑客。另外,我还建议使用json_encode来滚动你自己的json。我的php生锈了,所以我不确定这段代码是100%正确但是它在球场。
答案 2 :(得分:0)
不是完美的答案,但
$array = array();
while($gotArray=mysql_fetch_assoc(foodArray)){
$array[] = $gotArray;
};
$jsonOut = array2json($array);
现在array2json不存在,尽管有其他几个版本编码。你可以使用json_encode($ array);这将是接近但不正确。
答案 3 :(得分:0)
如何使用内置的php函数json_encode()?
您还可以使用Zend Framework中的Zend_Json,它将自动使用本机php json函数(如果可用),如果没有,它就是自己的实现。