Php 多维数组表填充
试图通过MySQL查询提供的数组生成表,我们将一个查询中需要的所有数据提取出来并存储到数组中 数组snippet(它当前有40多个子数组,但这是一个示例) 我们期望的结果是生成一个如下所示的表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
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>£'.$data['TotalPaid'].'</td>';
}
else
if($data['OrderStatus'] == 4){
$Table .= '<td>£'.$data['TotalPaid'].'</td>';
}
else
if($data['OrderStatus'] == 3){
$Table .= '<td>£'.$data['TotalPaid'].'</td>';
}
else
if($data['OrderStatus'] == 2){
$Table .= '<td>£'.$data['TotalPaid'].'</td>';
}
else
if($data['OrderStatus'] == 6){
$Table .= '<td>£'.$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_