2014-11-07 54 views
1

我仍然使用PHP & MySQL。此排隊看起來很簡單,但不知何故,我無法確定遞歸公式以正確使用foreach和數組來創建樹狀分層結構。PHP mysql創建樹狀分層結構和它們的計數

這是表結構

CREATE TABLE IF NOT EXISTS `table` (
`id` int(2) NOT NULL, 
    `lecturer` varchar(50) NOT NULL, 
    `subject` varchar(9) NOT NULL, 
    `section` int(2) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; 

INSERT INTO `table` (`id`, `lecturer`, `subject`, `section`) VALUES 
(1, 'Prof A', 'info2222', 1), 
(2, 'Prof A', 'info2222', 2), 
(3, 'Prof A', 'info3333', 1), 
(4, 'Prof A', 'info3333', 3), 
(5, 'Prof B', 'info4444', 1); 

這是示例輸出,我想:

================================================= 
| lecturer > subject > section | count total | 
================================================= 
| Prof A      | 4   | 
| |---info2222     | 2   | 
| | |---1     | 1   | 
| | |---2     | 1   | 
| |       |    | 
| |---info3333     | 2   | 
|  |---1     | 1   | 
|  |---3     | 1   | 
|        |    | 
| Prof B      | 1   | 
| |---info4444    | 1   | 
|  |---1     | 1   | 
================================================= 

我完整的代碼(目前)

<html> 
<head> 
<?php 

mysql_select_db('testing',mysql_connect('localhost','root',''))or die(mysql_error()); 

function count_recursive($array) 
{ 
    $c = 0; 
    foreach($array as $value) 
    { 
     if(is_array($value)) 
      $c += count_recursive($value); 
     else 
      $c++; 
    return $c; 
    } 
} 

?> 

</head> 

<body> 

<?php 

    $query = $pdo->query("Select * from table"); 
    $arr = []; 
    while($data = $query->fetch()) 
    { 
     $arr[$data['lecturer']][$data['subject']][] = $data['section']; 
    } 

    foreach($arr as $lecturer => $lvalues) 
    { 
     echo $query['lecturer'] ; 
     foreach($lvalues as $subject => $svalues) 
     { 
      echo $query['subject'] ; 
      foreach($svalues as $section) 
      { 
       echo $query['section'] ; 
      } 
     } 
    } 

?> 

</body> 
</html> 

回答

0

像這樣的東西應該工作:

$query = $pdo->query("Your select..."); 
$arr = []; 
while($data = $query->fetch()){ 
    $arr[$data['lecturer']][$data['subject']][] = $data['section']; 
} 

之後,您可以的foreach在(3D)陣列:

foreach($arr as $lecturer => $lvalues){ 
    //echo your lecturer here 
    foreach($lvalues as $subject => $svalues){ 
     //echo your subject here 
     foreach($svalues as $section) 
      //echo sour section here 
} 

算遞歸的一切,你可以使用:

function count_recursive($array){ 
    $c = 0; 
    foreach($array as $value) 
     if(is_array($value)) 
      $c += count_recursive($value); 
     else 
      $c++; 
    return $c; 
} 
+0

幫助!我怎樣才能修正這個錯誤 - > $ arr = [];? 解析錯誤:語法錯誤,意外的'['第31行 – Zidarm 2014-11-07 02:43:56

+0

您應該更新您的PHP版本。 $ arr = array();爲你工作。 – tkausl 2014-11-07 02:45:49