遍历PDO :: FETCH_GROUP数组以按类别输出结果

问题描述 投票:0回答:2

我确信这是一个非常简单的问题,我似乎无法理解。我想显示在屏幕上分为各自类别的链接列表。我正在使用引导程序,其想法是让每个链接类别在其自己的列中输出,标题下的链接为:>

例如:

--- Cat 1

------- Cat 2 ---

---链接1 ------链接3 ---

---链接2 ------链接4 ---

我有两个表:

  • 第一个“链接”具有列linkId,categoryId,linkTitle,linkDescription,linkUrl等。
  • 第二个“ linkcategories”具有categoryId,categoryTitle,categoryDe​​scription等列。>
  • 我正在使用PDO并使用以下命令从数据库中获取数据:

public function getLinkCategories() {
  $this->db->query('SELECT categoryTitle, linkTitle, linkDescription, linkUrl 
                    FROM link 
                    INNER JOIN linkcategories ON linkCategories.categoryId = link.categoryId 
                    WHERE link.marked_for_delete != 1');
  $results = $this->db->resultSetGrouped();
  return $results;
}

然后我使用下面的代码将结果传回,特别是我读到我应该使用PDO :: FETCH_GROUP,以便可以将行返回到嵌套数组中,其中索引将是第一列中的唯一值和值将是类似于常规fetchAll()返回的数组的数组。因此使用:

//get results set as array of objects - grouped
public function resultSetGrouped() {
  $this->execute();
  return $this->statement->fetchAll(PDO::FETCH_GROUP);
}

我的页面加载了以下内容,并将数据传递给视图:

public function index() {
  //get the links
  $links = $this->linkModel->getLinkCategories();
  $pageData = ['title' => 'Links • BM Intranet'];
  $data = ['pageData' => $pageData, 'linkCategories' => $links];
  $this->view('links/index', $data);
}

我认为我应该能够使用foreach循环在页面上显示结果,但是无法正确命名部分。这就是$ data中返回的内容。

Array
(
[pageData] => Array
    (
        [title] => Links • Intranet
    )

[linkCategories] => Array
    (
        [Unsorted] => Array //Unsorted is the category name
            (
                [0] => Array
                    (
                        [linkTitle] => a link title
                        [0] => a link title
                        [linkDescription] => This is an example of a link you can store. This is the external website
                        [1] => This is an example of a link you can store. This is the external website
                        [linkUrl] => https://www.asbcdef.co.uk/
                        [2] => https://www.abcdef.co.uk/
                    )

                [1] => Array
                    (
                        [linkTitle] => People
                        [0] => People
                        [linkDescription] => This is another link
                        [1] => This is another link
                        [linkUrl] => https://www.efgjk.co.uk/people/
                        [2] => https://www.efgjk.co.uk/people/
                    )

            )

    )

)

所以我被困的是上面的返回结果,并使其显示在页面上,如...

--- Cat 1

------- Cat 2 ---

---链接1 ------链接3 ---

---链接2 ------链接4 ---

我到目前为止...

foreach($data as $link) : ?>
<div class="col-lg-6 col-md-12 mb-5">
<div class="row">
  <div class="col lead border-bottom mb-2">
    <i class="fas fa-folder text-secondary"></i> <?php echo $link->linkCategories; ?>
  </div>
</div>
<div class="row">
  <div class="col">
    <a target="_blank" class="text-danger" href="<?php echo $category->url; ?>"><?php echo $category->linkTitle; ?></a>
    <span class="float-right text-secondary">Hits: <?php echo $category->hits; ?></span>
    <p mt-0>
      <?php echo $category->linkDescription; ?>
    </p>
  </div>
</div>

但这不起作用,因为属性不正确。

所以看起来我可以使用$ link [0] ['linkTitle']从数组中获取数据-因此我认为可以进行遍历。我现在不知道该怎么做,就是获取类别名称(在这种情况下,该名称等于-未排序-),并在其下方具有与之相关的链接

我确信这是一个非常简单的问题,我似乎无法理解。我想显示在屏幕上分为各自类别的链接列表。我正在使用bootstrap和这个主意...

php arrays twitter-bootstrap iteration
2个回答
0
投票

我建议您通过运行查询以所需的确切结构返回数据来以所需的方式获取数据。这可能涉及GROUP BY子句并使用HAVING进行过滤。


0
投票

基于当前数据分组,要遍历各组并检索类别名称,您将需要实现三个foreach($array as $index => $values)迭代。

© www.soinside.com 2019 - 2024. All rights reserved.