我有一个这样的MySQL查询:

SELECT c.id
     , c.company_name
     , b.brand_id
     , b.brand_name
  FROM companies as c
  JOIN brands AS b
    ON c.id = b.company_id;


返回如下表:

php - 组mysql导致嵌套数组-LMLPHP

结果存储在$items

我希望能够使用foreach循环来显示如下结果:

<ul>
  <li><b>adidas plc</b></li>
  <li>adidas</li>
</ul>
<ul>
  <li><b>coca-cola</b></li>
  <li>coke</li>
  <li>dr pepper</li>
  <li>7up</li>
</ul>
<ul>
  <li><b>ebay</b></li>
  <li>Duobam</li>
</ul>


仅使用上面的联接查询如何完成此操作?我可以通过以下方法来做到这一点:首先查询company表,然后对brand表中的每个表执行一个新查询,但是每个表都有成千上万的公司和多个品牌,这将导致过多的查询。

          foreach($items as $item){
            echo '
            <ul>
              <li><b>'.$item['company_name'].'</b></li>
              <li>'.$item['brand_name'].'</li>
            </ul>
            ';
          }

最佳答案

这是做这种事情的一种方式:

<?php

$brands = Array (
Array (  'company_name' => 'adidas',
         'brand_name' => 'adidas' ),
Array (  'company_name' => 'coca-cola',
         'brand_name' => 'coke' ),
Array (  'company_name' => 'coca-cola',
         'brand_name' => 'dr pepper' ),
Array (  'company_name' => 'coca-cola',
         'brand_name' => 'sprite' ),
Array (  'company_name' => 'ebay',
         'brand_name' => 'duobam' ),
);


$old_company = "";   // storage for current company_name


foreach($brands as $brand) {
    if($old_company!=$brand['company_name']) {  // if it changed, show it
        if($old_company!='') echo "</ul>";
        echo "<ul><li><b>".$brand['company_name']."</b></li>";
    }
    echo "<li>".$brand['brand_name']."</li>";
    $old_company=$brand['company_name'];  // update company_name
}
echo "</ul>";  // final ul closure

?>


表,表行等使用相同的技术...
注意,数据源必须按company_name排序/分组!

关于php - 组mysql导致嵌套数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41126899/

10-11 03:03
查看更多