2017-02-17 90 views
1

我无法弄清楚如何过滤/排序这些数组,然后显示第1部分,然后是第1部分的所有子部分(1,2,3,...),而不是第1部分重复。如何用PHP中的子节过滤掉数组的各个部分?

接下来,它将循环到第2部分,然后循环到第2部分的所有子部分(1,2,3,...),而不会重复第2部分。

必须有一个if语句或某些内容来帮助防止每个子节显示节。

SELECT section, subsection 
FROM table 
WHERE id = :id 
ORDER BY section, subsection 

输出部,= 1

然后只显示部1 = 1,2,3

然后输出节的小节= 2

然后仅显示的第第2部分= 1,2,3,4

阵列输出的样本

Array 
(
    [0] => Array 
     (
      section, => 1 
      [0] => 1 
      subsection=> 1 
      [1] => 1 
     ) 

    [1] => Array 
     (
      section, => 1 
      [0] => 1 
      subsection=> 2 
      [1] => 2 

     ) 
) 

我是想这样的循环,但无法弄清楚如何从复制停止部分:

<?php 
    echo "<div class='panel panel-default'>"; 
      $numrows = count($tabs); 
      for ($i =0; $i < $numrows; $i++){ 
       $sectionnumrows = count($tabs[$i]['section']); 
       echo $tabs[$i]['section'].","; // don't want this to repeat, only show once 

       for ($j=0; $j < $sectionnumrows; $j++){  

        $subsectionnumrows = count($tabs[$i]['subsection']); 
        for ($k=0; $k < $sectionnumrows; $k++){ 

         if([$i]['section'] == $j){ 
           echo "subsection ".$tabs[$i]['subsection']."<br>"; 
         } 
        } 
       } 
      } 
    echo "</div>"; 

回答

1

只需更改您的查询,您`ll只得到独特的部分,所有的节会如果我明白你想要什么

SELECT section, GROUP_CONCAT(subsection) as subsection 
FROM table 
WHERE id = :id 
GROUP BY section 
ORDER BY section, subsection 
+0

与测试这个唯一的问题是,这种方法终止在第1节。 – Sol

+0

@ user7480839由于您只有2个部分,因此将循环中的 Mihai

+0

将会有一些部分包含3个或更多部分......我会尝试一下。 :) – Sol

1

基于米哈伊答案:

$numrows = count($tabs); 
     for ($i =0; $i < $numrows; $i++){ 
      echo "section" . $tabs[$i]['section'].","; 
      $result = explode(',', $tabs[$i]['subsection']); // $row['subsection'] contains string 1,2,3.. .etc 
      foreach($result as $row){ 
       echo "<br> subsection ".$row ; 
      } 
     } 

下面是一个例子,如果你有2 GROUP_CONCAT小节:

SELECT section, 
     GROUP_CONCAT(subsection) as subsection1, 
     GROUP_CONCAT(subsection2) as subsection2 
FROM table 
WHERE id = :id 
GROUP BY section 
ORDER BY section, subsection 

$combined = array_combine($subsection1 , $subsection2); 

foreach ($combined as $subsection1 => $subsection2){ 
    echo "$subsection1 => $subsection2"; 
}