【问题标题】:PHP and MySQL get result as nested arraysPHP 和 MySQL 以嵌套数组的形式获取结果
【发布时间】:2014-10-20 23:24:22
【问题描述】:

我有这些代码行,它们根据制造商填充计算机列表:

<?php 
$query = "
SELECT m.manufacturerName
     , c.id
     , c.computerName
     , GROUP_CONCAT(c.model SEPARATOR ',') clients
     , c.computerName 
  FROM manufacturers m 
  JOIN computers c 
    ON c.manufacturerId = m.id 
 GROUP  
    BY m.id;
";

    $manufacturers = array();

    if ($result = $mysqli->query($query)) {
        while ($row = $result->fetch_assoc()) {
            $manufacturers[$row['manufacturerName']] = explode(',', $row['clients']);
        }
    }

    foreach ($manufacturers as $manufacturer => $clients) {
        echo '<div class="listview-outlook" data-role="listview">';
            echo '<div class="list-group">';
                echo '<a href="#" class="group-title">' . $manufacturer . '</a>';

                foreach ($clients as $client) {
                    echo '<div class="group-content">';
                        echo '<a href="/edit/computer.php?id=' . /* client id should be here */ . '" class="list">';
                            echo '<div class="list-content">' . $client  .'</div>';
                        echo '</a>';
                    echo '</div>';
                }

            echo '</div>';
        echo '</div>';
    }
?>

我应该怎么做才能在第二个 foreach 循环(第 20 行)内显示表格列 c.id 的结果?

我知道我需要以某种方式使用 id 构建我的数组,但是如何?我对编程很陌生,所以请多多包涵!

【问题讨论】:

  • 试试$manufacturer["id"]

标签: php mysql arrays foreach multidimensional-array


【解决方案1】:

试试这个:

<?php 
    $query = "SELECT m.manufacturerName, c.id, c.computerName, group_concat(c.model SEPARATOR ',') AS clients, c.computerName FROM manufacturers m ";
    $query .= "INNER JOIN computers c ON c.manufacturerId = m.id GROUP BY m.id";

    $manufacturers = array();

    if ($result = $mysqli->query($query)) {
        while ($row = $result->fetch_assoc()) {
            $manufacturers[$row['manufacturerName']] = $row;
            $manufacturers[$row['manufacturerName']]['clients'] = explode(',', $row['clients']);
        }
    }

    foreach ($manufacturers as $manufacturer => $data) {
        echo '<div class="listview-outlook" data-role="listview">';
            echo '<div class="list-group">';
                echo '<a href="#" class="group-title">' . $manufacturer . '</a>';

                foreach ($data['clients'] as $client) {
                    echo '<div class="group-content">';
                        echo '<a href="/edit/computer.php?id=' . $data['id'] . '" class="list">';
                            echo '<div class="list-content">' . $client  .'</div>';
                        echo '</a>';
                    echo '</div>';
                }

            echo '</div>';
        echo '</div>';
    }
?>

【讨论】:

  • 我在所有行上都得到computer.php?id=1。知道为什么吗?不过还是谢谢你的回复。
  • 是的,那是因为您将循环放入循环中。 $data['id'] 指的是相同的 id 第二个循环的每个结果。如果这不正确,您想归档什么?
  • 您的查询显示制造商有多个型号,您concat 给客户。因此,如果您在 manufacturersclients 中循环,那么该制造商中的所有客户都具有相同的制造商 ID,这是真的吗?
  • 是的,这是真的,也许我最初的问题并不清楚。每个客户端都有自己的 id (c.id),来自表 computers,我想在每个循环中回显。目前,它仅与每个制造商组的第一个 c.id 相呼应。你明白我的意思吗?
猜你喜欢
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
相关资源
最近更新 更多