首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于相同值从查询到表PHP检索的回波数据

基于相同值从查询到表PHP检索的回波数据
EN

Stack Overflow用户
提问于 2016-08-22 11:40:21
回答 3查看 44关注 0票数 1

所以我有一个数组,它由

代码语言:javascript
复制
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)

我想要回音一个基于采购订单号的表。因此,通过给定上面的数组,如何创建如下表:

代码语言:javascript
复制
  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

如何根据采购订单编号“分组”结果??已经处理了很长一段时间了,一直在搜索,但是真的找不到任何资源来实现它。

我有以下代码,这些代码可以工作,但并不完美。

代码语言:javascript
复制
  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>
                ';
            }
        }

以上代码将生成下表

代码语言:javascript
复制
 PO-1 
 122

 PO-2
 123

 PO-2
 124

请注意,我在这里编辑了数组数据,这样我就可以更直接了。输出数据没有问题。只有如何根据PO编号对其进行分组。

非常感谢您的帮助:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-22 11:54:22

使用下面的代码片段。同样的PO号码,我们现在只有一个记录。

代码语言:javascript
复制
$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
EN

Stack Overflow用户

发布于 2016-08-22 11:56:04

您可能需要考虑的是将数据存储在关系数据库中,以便可以按任意数量的字段进行分组。

如果PO编号是唯一的(意味着永远不会有两个相同的PO编号),您可以使用它作为通过关系表与一个或多个产品相关的表的主键。

您将有一个以PO号作为主键的表:

代码语言:javascript
复制
PO Num |
1

和一张与产品相关的表格

代码语言:javascript
复制
PO Num Product ID | PO Num | Product ID
1                   1        1

最后是一个产品表,它可以存储关于您的产品的内容

代码语言:javascript
复制
Product ID | Product Name
1            Widget

从这里开始,它只是基于PO查询: SELECT * PO_Table LEFT JOIN PO_Products_Table ON PO_Table.PO Num = PO_Products_Table.PO Num左联接Products_Table ON PO_Products_Table.ProductID = Products_table.ProductID;

SQL有大量内置的功能,用于分组等。

如果您想了解更多关于这个潜在选项的信息,我建议您学习MySQL,在堆栈溢出和w3c上都有一些很好的资源。

我不建议只在php中存储这样的数据。每次需要更新代码中的数据时,都有可能引入错误;根据经验,您应该始终将数据与对该数据执行操作的代码分开。

票数 0
EN

Stack Overflow用户

发布于 2016-08-22 11:57:43

在显示之前,需要对其进行分组:

代码语言:javascript
复制
$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'];
}

它应该产生这个数组:

代码语言:javascript
复制
$newData = array(
    'PO-1' => array(
        'ship_product_code' => array(
            122,
        ),
    ),

    'PO-2' => array(
        'ship_product_code' => array(
            123,
            124,
        ),
    ),
);

更新:

然后,您可以这样显示它:

代码语言:javascript
复制
foreach($newData as $purchaseOrderCode => $row){
    echo $purchaseOrderCode .' : ' . implode(',', $row['ship_product_code']);
}

它产生这个输出:

代码语言:javascript
复制
PO-1 : 122
PO-2 : 123,124
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39078598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档