php—从数据库中获取值并根据其他字段对其排序

eulz3vhy  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(300)

我正在使用php和mysql-[codeigniter framework]-这是我的表结构:
请访问此图片以了解表结构
每件商品都被分成三到四部分,这些部分构成了这件商品的价格。
这些物品属于一张发票 refid . refidinvoice_id 事实上。
现在我需要得到一个特定的发票项目,并显示在一个表中。
这就是我需要的:
请访问此图片以了解我的需要
我没有任何问题,从数据库中获取值,我将使用 codeigniter active records .
您可能知道,codeigniter数据库 result_array 函数将给我们一个关联数组。现在我想将每个项目与其他项目分开,并将它们显示在html表中,我必须使用 rowspan 对于每个项目依赖子项目。
你能帮我找出我应该如何使用结果数组来简单地在html表中显示结果吗?

w1jd8yoj

w1jd8yoj1#

假设得到这样的结果数组,

$result = array(
            array(
                'id' => 26,
                'price' => 100,
                'parent' => 0
            ),
            array(
                'id' => 27,
                'price' => 100,
                'parent' => 26
            ),
            array(
                'id' => 28,
                'price' => 150,
                'parent' => 26
            ),
            array(
                'id' => 29,
                'price' => 100,
                'parent' => 26
            ),
            array(
                'id' => 30,
                'price' => 100,
                'parent' => 0
            ),
            array(
                'id' => 31,
                'price' => 99,
                'parent' => 30
            ),
            array(
                'id' => 32,
                'price' => 75,
                'parent' => 30
            ),
            array(
                'id' => 33,
                'price' => 600,
                'parent' => 0
            ),
            array(
                'id' => 34,
                'price' => 100,
                'parent' => 33
            ),
            array(
                'id' => 35,
                'price' => 50,
                'parent' => 33
            ),
            array(
                'id' => 36,
                'price' => 100,
                'parent' => 33
            ),
        );

我无法从你的图像中手动插入数组中的所有数据,所以我只插入了一次所需的数据,
现在你可以这样对同一项的数据进行分组,

$new_array =  array();
        $invoice_price = 0;
        foreach ($result as $key => $value) {
            $invoice_price += $value['price'];
            if($value['parent'] == 0){
                $new_array[$value['id']]['other_data'][] = $value;
                $new_array[$value['id']]['final_price'] = $value['price'];
            }else{
                $new_array[$value['parent']]['other_data'][] = $value;
                $new_array[$value['parent']]['final_price'] += $value['price'];
            }
        }

现在如果你打印这个$new\u数组,你会得到以下输出,

Array
(
    [26] => Array
        (
            [other_data] => Array
                (
                    [0] => Array
                        (
                            [id] => 26
                            [price] => 100
                            [parent] => 0
                        )

                    [1] => Array
                        (
                            [id] => 27
                            [price] => 100
                            [parent] => 26
                        )

                    [2] => Array
                        (
                            [id] => 28
                            [price] => 150
                            [parent] => 26
                        )

                    [3] => Array
                        (
                            [id] => 29
                            [price] => 100
                            [parent] => 26
                        )

                )

            [final_price] => 450
        )

    [30] => Array
        (
            [other_data] => Array
                (
                    [0] => Array
                        (
                            [id] => 30
                            [price] => 100
                            [parent] => 0
                        )

                    [1] => Array
                        (
                            [id] => 31
                            [price] => 99
                            [parent] => 30
                        )

                    [2] => Array
                        (
                            [id] => 32
                            [price] => 75
                            [parent] => 30
                        )

                )

            [final_price] => 274
        )

    [33] => Array
        (
            [other_data] => Array
                (
                    [0] => Array
                        (
                            [id] => 33
                            [price] => 600
                            [parent] => 0
                        )

                    [1] => Array
                        (
                            [id] => 34
                            [price] => 100
                            [parent] => 33
                        )

                    [2] => Array
                        (
                            [id] => 35
                            [price] => 50
                            [parent] => 33
                        )

                    [3] => Array
                        (
                            [id] => 36
                            [price] => 100
                            [parent] => 33
                        )

                )

            [final_price] => 850
        )

)

希望你能看到数据已经按项目分组了。现在只需发送视图文件中的数据,

$this->load->view('yourviewfilename',array('data'=>$new_array,'invoice_price'=>$invoice_price));

要像屏幕截图一样打印表格,请使用以下代码,

<table border="1">
    <tr>
        <th>ID</th>
        <th>parent</th>
        <th>price</th>
        <th>final price</th>
    </tr>
    <?php $count = 0; ?>
    <?php foreach ($data as $key => $value) { ?>
        <?php $count++; ?>
        <?php foreach ($value['other_data'] as $k => $v) { ?>
            <tr>
                <?php if ($k == 0) { ?>
                    <td rowspan="<?php echo count($value['other_data']); ?>"><?php echo $count ?></td>
                <?php } ?>
                <td> <?php echo $v['parent']; ?></td>
                <td> <?php echo $v['price']; ?></td>
                <?php if ($k == 0) { ?>
                    <td rowspan="<?php echo count($value['other_data']); ?>"><?php echo $value['final_price']; ?></td>
                <?php } ?>
            </tr>
        <?php } ?>

    <?php } ?>
</table>

你会得到这样的输出,

希望你明白了,可以打印出你需要的其他数据。

相关问题