Php 多维数组表填充

Php 多维数组表填充,php,mysql,arrays,Php,Mysql,Arrays,试图通过MySQL查询提供的数组生成表,我们将一个查询中需要的所有数据提取出来并存储到数组中 数组snippet(它当前有40多个子数组,但这是一个示例) 我们期望的结果是生成一个如下所示的表 Date | Processing | Complete | Deleted October 2013 £150 £100 £0 September 2013 £400 £200 £50 等等,可以追溯到(x

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

数组snippet(它当前有40多个子数组,但这是一个示例)

我们期望的结果是生成一个如下所示的表

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;
$MasterSQL=“选择日期格式(DTStamp,(“%M-%Y”)作为“日期”,总和(TotalPaid)作为“TotalPaid”,按订单状态从bs_订单组中提取订单状态,按订单状态ASC提取订单(DTStamp中的年/月),按订单状态DTStamp描述”;
$MasterData=$db->getResults($MasterSQL);
$Table='';
$Table.=“页面标题”;
$Table.='一些文本

'; $Table.=''; $Table.=''; $Table.=“待定”; $Table.=“完成”; $Table.=“问题”; $Table.='WP Complete'; $Table.=“已删除”; $Table.=''; $DataArray=array(); while($row=mysql\u fetch\u assoc($MasterData)){ $DataArray[]=$row; } $DateArr=array(); foreach($DataArray作为$Date){ if(!in_数组($Date['Date'],$DateArr)) { $Table.=''; $Table.=''.$Date['Date'].'; foreach($DataArray作为$data){ 如果($data['Date']=$Date['Date'])){ $DateArr[]=$Date['Date']; 如果($data['OrderStatus']==1){ $Table.='£;'.$data['TotalPaid'].'; } 其他的 如果($data['OrderStatus']==4){ $Table.='£;'.$data['TotalPaid'].'; } 其他的 如果($data['OrderStatus']==3){ $Table.='£;'.$data['TotalPaid'].'; } 其他的 如果($data['OrderStatus']==2){ $Table.='£;'.$data['TotalPaid'].'; } 其他的 如果($data['OrderStatus']==6){ $Table.='£;'.$data['TotalPaid'].'; } }//如果($data['Date']=$Date['Date'])) }//foreach($DataArray作为$data) $Table.=''; }//如果(!in_数组($Date['Date'],$DateArr)) }//foreach($DataArray作为$Date) 回声';
...
foreach($DataArray as $Date){
    if(!in_array($Date['Date'], $DateArr))
...
打印(数据数组); 回声';
...
foreach($DataArray as $Date){
    if(!in_array($Date['Date'], $DateArr))
...
$Table.=''; $Table.=''; $Table.=“待定”; $Table.=“完成”; $Table.=“问题”; $Table.='WP Complete'; $Table.=“已删除”; $Table.=''; $Table.=''; echo$表;

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

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

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

在没有SqlFIDLE的情况下尽我所能帮助您

不要这样做:

...
foreach($DataArray as $rowNum => $row){
...
要在这些行中循环,请改为执行以下操作:

IFNULL(Complete , '0')
它不仅易于阅读,而且会大大简化代码,从而消除“in_array”语句引起问题的可能性(可能是这样)

或者,如果希望结果集在列上强制使用“0”而不是null(这可能会导致您的问题)。看看IFNULL MySQL函数。您可能可以执行以下操作:


这会将任何“null”结果更改为0。这也有可能解决您的问题。再一次,你的答案将与一把小提琴更加相关;一个潜在的回答者可以抓住你的模式,在AMP堆栈上快速测试,并为你找到答案。

在没有SQLFiddle的情况下,我会尽力帮助你

不要这样做:

...
foreach($DataArray as $rowNum => $row){
...
要在这些行中循环,请改为执行以下操作:

IFNULL(Complete , '0')
它不仅易于阅读,而且会大大简化代码,从而消除“in_array”语句引起问题的可能性(可能是这样)

或者,如果希望结果集在列上强制使用“0”而不是null(这可能会导致您的问题)。看看IFNULL MySQL函数。您可能可以执行以下操作:


这会将任何“null”结果更改为0。这也有可能解决您的问题。再一次,你的答案将与一把小提琴更加相关;潜在的回答者可以抓住您的模式,在AMP堆栈上快速测试并找到答案。

这需要消化大量代码,但您的问题似乎在SQL查询本身中。您可以发布一个SQLFIDLE,其中包含您试图处理的数据示例。我可以向你保证,如果你这样做了,你会得到更准确的答案,这将表明你在提出问题之前已经完成了家庭作业。是我还是你所有的其他人……如果他们做了完全相同的事情?另外,您还没有真正告诉我们如何确定事务完成、删除等。我猜状态1已完成?请不要使用
mysql_