Php 循环中最后一个/第一个条目的单独处理(具有子循环)
我在以下情况下遇到了一些麻烦。我想输出嵌套信息,看起来有点像这样:Php 循环中最后一个/第一个条目的单独处理(具有子循环),php,nested-loops,Php,Nested Loops,我在以下情况下遇到了一些麻烦。我想输出嵌套信息,看起来有点像这样: "name": "X", "children": [ { "name": "categories", "children": [ { "name": "Cat A", "children": [ {"name": "B"}, {"name": "C"}, {"name": "D"} ] },
"name": "X",
"children": [
{
"name": "categories",
"children": [
{
"name": "Cat A",
"children": [
{"name": "B"},
{"name": "C"},
{"name": "D"}
]
},
{
"name": "Cat B",
"children": [
{"name": "C"},
{"name": "D"}
]
}
在本例中,您可以看到子类A的最后一个}结尾处有一个逗号,而最后一个嵌套类B的结尾处没有逗号。在一个例子中,我学习了如何解析内部循环{name:D}中的逗号。但是,在第一个while循环结束时,使用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,在循环结束时,将其递增1。然后,使用if语句查看变量是否等于0
不过,请使用json_编码。它将产生更干净、更易于维护的代码 为什么不使用json_encode呢?只需创建简单的对象并使用。自己编写一个JSON编码器是一个非常糟糕的主意。我通常觉得构建一个输出数组然后使用JSON_encode更容易。谢谢你的提示!我不知道php有这样的选择。我会考虑使用它!谢谢成功了!谢谢,我上次使用php是很久以前的事了,我不知道json_encode函数。我会调查一下的!非常感谢你!