2016-02-29 93 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