循环中的最后/第一个条目的单独处理(具有子循环)

时间:2014-03-23 22:44:17

标签: php nested-loops

我遇到以下情况的麻烦。我想输出看起来有点像这样的嵌套信息:

 "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语句中删除。 但是,使用内爆类别并没有成功。在上一个主题中,如果用户不是第一个输出,则用户指出我要在代码之前添加它。但是,在这种情况下,这会起作用吗?如果是这样,我怎么能标记这是否是第一次迭代?

我希望有人可以帮助我, 再次非常感谢帮助, 提前谢谢!

1 个答案:

答案 0 :(得分:0)

在循环开始时,将变量设置为0,并在循环结束时将其递增1.然后,使用if语句查看变量是否等于0.

但是使用json_encode()。它将导致更清晰,更易于维护的代码。