【问题标题】:Foreach with condition on a specific attribute?对特定属性有条件的foreach?
【发布时间】:2015-01-08 17:40:21
【问题描述】:

我有一个存储出版物的数据库: 出版物 ID、作者(考虑优先级)和出版物标题

我在使用第二个 foreach 时遇到了问题,因为我需要一个循环来生成作者姓名,然后再转到标题。查询会带来很好的结果,例如:

PID 作者标题

1 NAME1 TITLE1

1 名称 2 标题 1

1 NAME3 TITLE1

2 NAME1 TITLE2

2 名称2 标题2

2 名称3 标题2

等等

我希望最终结果是:

1 NAME1,NAME2,NAME3 TITLE1

2 名称1,名称2,名称3 TITLE2

这是我的代码:

foreach ($query->result() as $row)
  {
    echo $row->PID;
    echo ": ";

    foreach ($query->result() as $row)
      {
        echo $row->AUTHORS;
        echo ", ";
      }

    echo $row->TITLE;
    echo "<br>" . "<br>";
  }

【问题讨论】:

  • 你为什么要做 2 个 foreach 循环?并且不回显 $row->PID;休息?不应该是 echo $row->PID."";
  • 因为每个出版物都有多个作者。请参阅我提供的示例。我需要第二个 foreach 来生成作者姓名,然后才能输入标题和下一篇文章的开头等等

标签: php html loops foreach indexing


【解决方案1】:

您可以在从数据库中检索数据时使用 GROUP_CONCAT() 函数,而不是使用两个 for 循环。例如,您可以使用

SELECT PID, GROUP_CONCAT(DISTINCT Authors SEPARATOR ','),TITLE1 FROM table GROUP BY PID;

【讨论】:

  • 我如何才能在我看来呼应作者。我试过 { echo $row->authors; } 但它说“未定义的属性:stdClass::$authors”。顺便说一句,多么有用的功能,非常感谢。
  • 没关系只使用 GROUP_CONCAT(DISTINCT Authors SEPARATOR ',') 作为作者。成功了,再次感谢您
  • 有什么办法可以让我在姓氏前加上'and'而不是逗号','??
  • 抱歉,您不能只为姓氏添加这样的内容。
【解决方案2】:

你在两个查询中都使用了 $query->result(),试试这个

foreach ($query->result() as $row)
{
   echo $row->PID."</span>";
   echo ": ";

   echo implode(', ', $row->authors);

   echo $row->TITLE</span>;
   echo "<br>" . "<br>";
}

【讨论】:

  • 我知道我使用了相同的 foreach,因为我不知道如何指定当前行。我不在我的桌面上,您的回答听起来合乎逻辑,非常感谢您。我一回家就试试。但是,根据我上面给出的示例,前 3 行具有相同的 PID,并且仅标题 Position(names) 不同。我怎样才能让第二个 foreach 只带相同 PID 的名称?
  • 我建议你重新编码你的查询select * from table order by PID, Priority
  • 它不起作用,我认为我们仍然需要第二个循环来生成名称。我错过了输入上面的示例(查询结果)并且它令人困惑,请阅读它,因为我刚刚修复它。对于那个很抱歉。现在应该说得通了。任何建议将不胜感激。
猜你喜欢
  • 2012-12-24
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 2021-09-20
  • 2022-06-25
  • 1970-01-01
相关资源
最近更新 更多