2014-08-27 66 views
0

我有几行代码用于填充基于其生产的计算机列表:PHP和MySQL得到结果为嵌套数组

<?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>'; 
    } 
?> 

我应该怎么操作才能呈现从表列c.id结果在第二个foreach循环(第20行)?

我明白,我不知何故需要建立我的数组与id,但如何?我对编程相当陌生,所以请耐心等待!

+0

尝试'$制造商[ “身份证”]' – Gudgip 2014-08-27 11:57:31

回答

0

试试这个:

<?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>'; 
    } 
?> 
+0

我得到'computer.php ID = 1'的所有行?任何想法为什么?尽管感谢您的回复。 – David 2014-08-27 13:04:52

+0

是的,这是因为你在循环中放置一个循环。 '$ data ['id']'指向第二个循环的每个结果的相同'id'。如果这是不正确的,你希望实现的是什么? – 2014-08-27 13:09:49

+0

您的查询显示制造商有多种型号,您可以将它们连接到客户端。所以,如果你通过“客户”循环“制造商”,那么制造商中的所有客户都拥有相同的生产编号? – 2014-08-27 13:14:14