2016-07-27 30 views
-1

我想以某種方式在foreach循環中對項目進行分組,因此我可以有效地顯示它們。例如,如果我有以下MySQL表:在PHP foreach循環中對項目進行分組

user_id username group_id 
1  John  1 
2  Mark  2 
3  Steve 2 

我想在GROUP_ID 2的用戶顯示在一起<div class="group2">Username 1: Mark, Username 2: Steve</div>和用戶GROUP_ID 1 <div class="group1">Username John</div>

我希望你能理解這個問題。

+2

到目前爲止您嘗試了什麼? –

+0

我什麼也沒試,我也不知道該怎麼做 – Barba

+1

那你也有。 –

回答

1

您可以通過group_id訂購您的查詢,然後跟蹤其更改時間,輕鬆完成此操作。類似這樣的:

​​

或者,您可以使用MySQL GROUP_CONCAT函數來取回組中的所有用戶名。使用此:

$query = "SELECT group_id, 
GROUP_CONCAT(username) as users 
FROM table 
GROUP BY group_id"; 

$results = $mysqli->query($query); 
while ($row = $results->fetch_assoc()) 
{ 
    echo '<div class="group' . $row['group_id'] . '">' . $row['users'] . '</div>'; 
} 
0

創建一個二維數組:

$users; 

的foreach結果行$行:

$users[$row->group_id][$row->user_id] = $row->username; 

然後:

foreach($users as $group_id -> $group_users) { 
    echo '<div class="' . $group_id . '">'; 
    foreach($group_users as $user_id -> $username) { 
     echo " Username: "; 
     echo $user_id; 
     echo " :"; 
     echo $username; 
    } 
    echo "</div>"; 
} 
+1

'+'不是在PHP中使用的正確的連接器,它應該是''' – Styphon

+0

的確。感謝您的更正。 –

0
強烈推薦使用您的查詢使用g mysql GROUPing功能所以你不必機械地做到這一點。但是,如果出於任何原因,您的結果集看起來像您發佈的數據,您希望循環訪問並按照您所描述的方式顯示記錄;您可以遍歷行的陣列,將同一組中的所有用戶捆綁到一個唯一的子陣列中,然後爲顯示器運行一個 foreach循環。下面的代碼演示如何舉一個例子:
<?php 

     // SIMULATE AN TO REPRESENT THE RECORDS FROM THE DB TABLE... 
     $array = array(
      array(
       "user_id" => 1, 
       "username" => "John", 
       "group_id" => 1, 
      ), 
      array(
       "user_id" => 2, 
       "username" => "Mark", 
       "group_id" => 2, 
      ), 
      array(
       "user_id" => 2, 
       "username" => "Steve", 
       "group_id" => 2, 
      ), 
     ); 

     // CREATE AN ARRAY FOR USE IN GROUPING USERS WITH THE SAME group_id 
     $groupArray = array(); 

     // WALK THE SIMULATED ARRAY (IN YOUR CASE YOUR ROWS) 
     // AND BUILD UP THE $groupArray 
     $result  = array_walk($array, function($data) use(&$groupArray) { 
      if(!array_key_exists($data['group_id'], $groupArray)){ 
       $groupArray[$data['group_id']][]  = $data; 
      }else{ 
       if(!in_array($data, $groupArray)){ 
        $groupArray[$data['group_id']][] = $data; 
       } 
      } 
     }); 

     // CREATE AN OUTPUT TO HOLD THE HTML CONTENT FOR DISPLAY: 
     $output  = ""; 

     // LOOP THROUGH THE $groups AND BUILD UP YOUR DATA... 
     foreach ($groupArray as $groupID=>$groups){ 
      $output.= "<div class='group" . $groupID . "'>" . PHP_EOL; 
      $output.= "<h3 class='group-users'>Users in Group {$groupID}</h3>" . PHP_EOL; 

      foreach($groups as $group){ 
       $output.= "<span class='user-name'>Username: " . $group['user_id'] . ": {$group['username']},</span><br />" . PHP_EOL; 
      } 
      $output.= "</div>" . PHP_EOL; 
     } 


     var_dump($output); 
     // echo $output; 



     // THE var_dump($output) PRODUCES::   
     string '<div class='group1'> 
        <h3 class='group-users'>Users in Group 1</h3> 
        <span class='user-name'>Username: 1: John,</span><br /> 
       </div> 
       <div class='group2'> 
       <h3 class='group-users'>Users in Group 2</h3> 
        <span class='user-name'>Username: 2: Mark,</span><br /> 
        <span class='user-name'>Username: 2: Steve,</span><br /> 
       </div> 
       ' (length=317)