所以我有这个由
组成的数组array (size=3)
0 =>
array (size=2)
'id' => string '46' (length=2)
'ship_product_code' => string '122' (length=6)
'purchase_order_number' => string 'PO-1' (length=4)
1 =>
array (size=2)
'id' => string '47' (length=2)
'ship_product_code' => string '123' (length=6)
'purchase_order_number' => string 'PO-2' (length=4)
2 =>
array (size=2)
'id' => string '50' (length=2)
'ship_product_code' => string '124' (length=6)
'purchase_order_number' => string 'PO-2' (length=4)
我想回显一个基于采购订单号的表。因此,通过上面给出的数组,我如何创建一个如下所示的表:
PO-1 //PO Number
122 // Product Code
<tr> <td> </td> </tr>//another td for space
PO-2 //PO Number
123 // Product Code
124 // Product Code
我怎样才能&#34;分组&#34;基于采购订单号的结果?? 已经处理了很长一段时间,继续搜索,但无法找到任何资源来实现这一目标。
我有以下代码可行但不完美
if(count($products)>0){
$i=0;
foreach($products as $v){
$PDFCONTENT .= '<tr>
<td align="center" width="7%"> </td>
<td align="center" width="50%">'.$v['purchase_order_number'].'</td>
</tr>';
$i++;
$PDFCONTENT .= '
<tr>
<td align="center" width="7%">'.$i.'</td>
<td align="center" width="50%">'.$v['ship_product_code].'</td>
<td align="center" width="7%">'.number_format($v['qty']).'</td>
<td width="7%"> </td>
</tr>
<tr>
<td></td>
</tr>
';
}
}
上面的代码将产生以下表格
PO-1
122
PO-2
123
PO-2
124
请注意我在这里编辑了数组数据,所以我可以更直接。输出数据没有问题。只能如何根据采购订单编号进行分组。
非常感谢您的帮助:)
答案 0 :(得分:1)
使用以下代码段。使用相同的采购订单编号,我们现在只有一条记录。
$fianlProducts = [];
if(count($products)>0){
foreach($products as $row){
$fianlProducts[$row['purchase_order_number']]['purchase_order_number'] = $row['purchase_order_number'];
$fianlProducts[$row['purchase_order_number']]['ship_product_code'][] = $row;
}
$i=0;
foreach($fianlProducts as $v){
$PDFCONTENT .= '<tr>
<td align="center" width="7%"> </td>
<td align="center" width="50%">'.$v['purchase_order_number'].'</td>
</tr>';
foreach($v['ship_product_code'] as $w){
$i++;
$PDFCONTENT .= '
<tr>
<td align="center" width="7%">'.$i.'</td>
<td align="center" width="50%">'.$w['ship_product_code'].'</td>
<td align="center" width="7%">'.number_format($w['qty']).'</td>
<td width="7%"> </td>
</tr>
<tr>
<td></td>
</tr>
';
}
}
}
答案 1 :(得分:0)
您可能需要考虑的是将数据存储在关系数据库中,以便您可以按任意数量的字段进行分组。
如果您的采购订单编号是唯一的(意味着永远不会有两个相同的采购订单编号),您可以将其用作通过关系表与一个或多个产品相关的表的主键。
您有一个以PO编号为主键的表格:
PO Num |
1
一张与产品相关的表格
PO Num Product ID | PO Num | Product ID
1 1 1
最后是一个可以存储产品内容的产品表
Product ID | Product Name
1 Widget
从这里开始,它只是根据PO Num进行查询: SELECT * FROM PO_Table LEFT JOIN PO_Products_Table ON PO_Table.PO Num = PO_Products_Table.PO Num LEFT JOIN Products_Table ON PO_Products_Table.ProductID = Products_table.ProductID;
SQL有大量内置功能,用于分组等。
如果您想了解更多关于这个潜在选项的信息,我建议学习MySQL,在堆栈溢出和w3c上都有一些很好的资源。
我不建议只在php中存储这样的数据。每次需要更新代码中的数据时,都有可能引入错误;根据经验,您应该始终将数据与对该数据执行操作的代码分开。
答案 2 :(得分:0)
您需要在显示之前对其进行分组:
C:\Users\x216526\AppData\Roaming\npm/protractor4.0.3
它应该产生这个数组:
toBe
更新:
然后你可以这样显示:
$newData = array();
foreach($data as $row){
$purchaseOrderNumber = $row['purchaseOrderNumber'];
if(!isset($newData[$purchaseOrderNumber])){
$newData[$purchaseOrderNumber] = array(
'ship_product_code' => array(),
);
}
$newData[$purchaseOrderNumber]['ship_product_code'][] = $row['ship_product_code'];
}
产生此输出:
$newData = array(
'PO-1' => array(
'ship_product_code' => array(
122,
),
),
'PO-2' => array(
'ship_product_code' => array(
123,
124,
),
),
);