2016-02-29 456 views
0

我期待將我的數組分組到子數組中,當它們具有相同的供應商ID時。我在這裏看過很多類似的問題,但是我無法讓他們中的任何人爲我工作。我已經嘗試了foreach循環,甚至PHP合併函數。我必須爲此使用MySQLi,所以我不能使用PDO進行分組。按值分組數組

這是我有:

Array 
(
    [supplierID] => 1 
    [drugID] => 1 
    [costPrice] => 9.98 
    [reorderQTY] => 50 
) 

Array 
(
    [supplierID] => 1 
    [drugID] => 2 
    [costPrice] => 9.98 
    [reorderQTY] => 50 
) 

Array 
(
    [supplierID] => 2 
    [drugID] => 3 
    [costPrice] => 9.98 
    [reorderQTY] => 50 
) 

這就是我需要:

Array 
(
    [supplierID] => 1 
     Array 
      (
       [drugID] => 1 
       [costPrice] => 9.98 
       [reorderQTY] => 50 
      ) 
       [drugID] => 2 
       [costPrice] => 9.98 
       [reorderQTY] => 50 
      ) 
) 


Array 
(
    [supplierID] => 2 
     Array 
      (
       [drugID] => 3 
       [costPrice] => 9.98 
       [reorderQTY] => 50 
      ) 
) 

這是我在輸出陣列以獲得上述結果的PHP:

if(isset($_POST["automatic"])){ 

    $sql = "SELECT supplierID,drugID,costPrice,reorderQTY FROM drugs WHERE quantityInStock <= reorderLevel"; 
    $result = mysqli_query($conn, $sql); 

    if (mysqli_num_rows($result) > 0) { 
     // output data of each row 
     while($row = mysqli_fetch_assoc($result)) { 

      echo "<pre>"; 
      print_r($row);// I need to sort this array into sub array groups by supplierID key 
      echo "</pre>"; 



     } 
    }else{ 
     echo " <tr><td>0 results </td></tr>"; 
    } 
    mysqli_close($conn); 
} 
+0

pdo與分組有什麼關係?分組是你在sql中做的事情,而且pdo只是在那裏發送sql到數據庫服務器。它可以不在乎如果你分組或不。這不是pdo的工作。 –

+0

你不能讓數組看起來像你想要的。這是一個無效的標記。您不能有多個具有相同名稱的密鑰(「supplierID」)。並且你不能同時使用整數和數組。@Tom Millards下面的回答是你應該去的方式...... –

回答

3

像這樣的事情會做到這一點,

$out = [];   
    while($row = mysqli_fetch_assoc($result)) { 
     $out[$row->supplierID][] = $row; 
    } 

基本上我使用供應商ID來創建一個數組鍵,然後分配一個空數組。然後將具有該供應商ID的所有行添加到該陣列。這個將創建一個多維數組。

+0

if語句已過時;這兩行不相關,可以刪除。你應該總是使用大括號來幫助可讀性。 – Ashley

+0

公平不夠會更新 –

+0

這對我來說非常適合。謝謝 – Sledro