php - 多维数组表填充

标签 php mysql arrays

尝试通过 MySQL 查询提供的数组生成表,我们提取一个查询中所需的所有数据并将其存储到数组中。

数组片段(它目前有超过 40 个子数组,但这是一个例子)

Array
(
[0] => Array
    (
        [Date] => October-2013
        [TotalPaid] => 100.00
        [OrderStatus] => 1
    )

[1] => Array
    (
        [Date] => October-2013
        [TotalPaid] => 150.00
        [OrderStatus] => 2
    )

我们想要的结果是生成一个看起来像这样的表

Date           | Processing | Complete | Deleted
October 2013        £150        £100       £0
September 2013      £400        £200       £50

等等可以追溯到 (x) 年前。

我已经设法让表格显示正确的行,但是我们遇到了这个月没有任何完整交易的情况,所以上面期望的输出最终像

Date           | Processing | Complete | Deleted
October 2013        £150        £100       £0
September 2013      £400        £50

代码是

$MasterSQL = "SELECT DATE_Format(DTStamp, ('%M-%Y')) AS 'Date', SUM(TotalPaid) AS 'TotalPaid', OrderStatus FROM bs_orders GROUP BY OrderStatus, EXTRACT(YEAR_MONTH FROM DTStamp) ORDER BY OrderStatus ASC, DTStamp DESC";
        $MasterData= $db->getResults($MasterSQL);

        $Table     = '';
        $Table .= '<h2>Page Title</h2>';
        $Table .= '<p>Some Text</p>';
        $Table .= '<table id="Report">';
            $Table .= '<tr>';
                $Table .= '<th>Pending</th>';
                $Table .= '<th>Complete</th>';
                $Table .= '<th>Problem</th>';
                $Table .= '<th>WP Complete</th>';
                $Table .= '<th>Deleted</th>';
            $Table .= '</tr>';

        $DataArray = array();
        while($row = mysql_fetch_assoc($MasterData)){
            $DataArray[] = $row;
        }

        $DateArr = array();
        foreach($DataArray as $Date){
            if(!in_array($Date['Date'], $DateArr))
            {
                $Table .= '<tr>';
                $Table .= '<td>'.$Date['Date'].'</td>';
                foreach($DataArray as $data){
                    if($data['Date'] == $Date['Date']){
                        $DateArr[] = $Date['Date'];

                        if($data['OrderStatus'] == 1){
                            $Table .= '<td>&pound;'.$data['TotalPaid'].'</td>';
                        }
                        else 
                        if($data['OrderStatus'] == 4){
                            $Table .= '<td>&pound;'.$data['TotalPaid'].'</td>';
                        }
                        else
                        if($data['OrderStatus'] == 3){
                            $Table .= '<td>&pound;'.$data['TotalPaid'].'</td>';
                        }
                        else
                        if($data['OrderStatus'] == 2){
                            $Table .= '<td>&pound;'.$data['TotalPaid'].'</td>';
                        }
                        else
                        if($data['OrderStatus'] == 6){
                            $Table .= '<td>&pound;'.$data['TotalPaid'].'</td>';
                        }

                    } // if($data['Date'] == $Date['Date'])
                } // foreach($DataArray as $data)
                $Table .= '</tr>';
            } // if(!in_array($Date['Date'], $DateArr))
        } // foreach($DataArray as $Date)


        echo '<pre>';
        print_r($DataArray);
        echo '</pre>';

        $Table .= '<tr>';
        $Table .= '<th> </th>';
        $Table .= '<th>Pending</th>';
        $Table .= '<th>Complete</th>';
        $Table .= '<th>Problem</th>';
        $Table .= '<th>WP Complete</th>';
        $Table .= '<th>Deleted</th>';
        $Table .= '</tr>';
        $Table .= '</table>';
        echo $Table;

这可能只是一个我忽略的简单修复,我尝试了多种 if else 语句的方法,但似乎没有任何效果。

最佳答案

您需要一个数组,其中包含您想要的所有列,且顺序正确。然后 foreach $dataArray,遍历该列数组,如果数据数组中不存在该值,则打印一个空白单元格。

关于php - 多维数组表填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19429184/

相关文章:

php - 尝试使用 PHP 调整图像大小

php - PHP 中的优先级队列

php - 将字符串作为参数传递给函数时使用双引号与单引号

php - 这段代码是否正确地从 Xcode 发布字符串并使用 php 将它们发布到 mysql 数据库

java - 显示不同数组类型的值

javascript - 向后遍历不可计算的嵌套数组,节点遍历 - Javascript?

php - 在 mySQL 上设置用户帐户

mysql - SQL GROUP BY 同时在每一列中显示最近的日期,没有子查询

mysql - 如何在没有多个联接的情况下从规范化数据库结构中检索值?

c - C中定义数组类型问题