我遇到以下情况的麻烦。我想输出看起来有点像这样的嵌套信息:
"name": "X",
"children": [
{
"name": "categories",
"children": [
{
"name": "Cat A",
"children": [
{"name": "B"},
{"name": "C"},
{"name": "D"}
]
},
{
"name": "Cat B",
"children": [
{"name": "C"},
{"name": "D"}
]
}
在这种情况下,您会看到最后一个孩子Cat A在末尾有一个逗号,而最后一个巢(Cat B)在末尾没有逗号。在previous topic中,我学会了如何解决内循环({"name": "D"}
)中的逗号。但是,在第一个while循环结束时使用implode(使用sprintf而不是printf)(参见下面的代码)会创建数据的双重打印。
这是代码的样子(略微调整):
while ($ucs = mysqli_fetch_object($uc))
{
printf('{');
printf('"name": "%s",', $ucs->cat);
/*for ($i = 0; $i < 100; $i++)
{
$cat_name = $ucs->cat;
}*/
printf('"children": [');
$rtitle = "SELECT title FROM table WHERE genre='$category'";
//Some other code of lesser relevance for this issue
$names = array();
while ($title2 = mysqli_fetch_object($ptitles)) {
$names[] = sprintf('"name": "%s"', $title2->title);
}
echo implode(',', $names);
printf(']');
printf('},');
//Some other code
现在主要问题是将逗号从最后一个print语句中删除。 但是,使用内爆类别并没有成功。在上一个主题中,如果用户不是第一个输出,则用户指出我要在代码之前添加它。但是,在这种情况下,这会起作用吗?如果是这样,我怎么能标记这是否是第一次迭代?
我希望有人可以帮助我, 再次非常感谢帮助, 提前谢谢!
答案 0 :(得分:0)
在循环开始时,将变量设置为0,并在循环结束时将其递增1.然后,使用if语句查看变量是否等于0.
但是使用json_encode()。它将导致更清晰,更易于维护的代码。