Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在foreach中获取更多数据_Php_Mysql_Foreach - Fatal编程技术网

Php 在foreach中获取更多数据

Php 在foreach中获取更多数据,php,mysql,foreach,Php,Mysql,Foreach,因此,我需要从数据库中获取数据,例如节、项名称和每个节的小计,并获得所有项的总计。 我偶然发现了下面的代码,并根据我的要求对其进行了修改。 代码工作完美,但我需要显示更多的数据,如项目描述,数量,价格,状态等。 下面的代码工作正常,没有任何问题,但我需要更多的数据(描述、数量、价格等)显示在我的表中,但我不知道如何做。 我需要显示的数据也在同一行中,其中包含projectscostbreakdown\u areaname、projectscostbreakdown\u itemname和proj

因此,我需要从数据库中获取数据,例如节、项名称和每个节的小计,并获得所有项的总计。 我偶然发现了下面的代码,并根据我的要求对其进行了修改。 代码工作完美,但我需要显示更多的数据,如项目描述,数量,价格,状态等。 下面的代码工作正常,没有任何问题,但我需要更多的数据(描述、数量、价格等)显示在我的表中,但我不知道如何做。 我需要显示的数据也在同一行中,其中包含projectscostbreakdown\u areaname、projectscostbreakdown\u itemname和projectscostbreakdown\u totalcost

<?php
$projectsid = $_GET['projectrfpid'];
$itemdeleted = 1;
$itemfirstothers = 'OTHERS';
$query = $conn->prepare('SELECT projectscostbreakdown_id,
projectscostbreakdown_projectid,
projectscostbreakdown_areaname,
projectscostbreakdown_itemname,
projectscostbreakdown_itemdescription,
projectscostbreakdown_qty,
projectscostbreakdown_costpiece,
projectscostbreakdown_budgeted,
projectscostbreakdown_totalcost,
projectscostbreakdown_note,
projectscostbreakdown_addedby,
projectscostbreakdown_addeddate,
projectscostbreakdown_deleted,
projectscostbreakdown_lastedit,
projectscostbreakdown_lasteditby
FROM projectscostbreakdown WHERE projectscostbreakdown_projectid=:projectsid && projectscostbreakdown_deleted=:itemdeleted ORDER BY projectscostbreakdown_areaname=:itemfirstothers, projectscostbreakdown_areaname ASC, projectscostbreakdown_id DESC');
$query->bindParam(':projectsid', $projectsid, PDO::PARAM_INT);
$query->bindParam(':itemdeleted', $itemdeleted, PDO::PARAM_INT);
$query->bindParam(':itemfirstothers', $itemfirstothers, PDO::PARAM_INT);
$query->execute();

$data = array();
$data2 = array();

$numbering = 0; //for item count
$count = 1; //counter use for background color
while ( $row2 = $query->fetch() ) {

if ( empty($data[ $row2['projectscostbreakdown_areaname'] ]) ) {
    $data[ $row2['projectscostbreakdown_areaname'] ]= array();
    $data2[ $row2['projectscostbreakdown_itemdescription'] ][ $row2['projectscostbreakdown_qty'] ]= array();
}

if ( empty( $data[ $row2['projectscostbreakdown_areaname'] ][ $row2['projectscostbreakdown_itemname'] ] ) ) {
    $data[ $row2['projectscostbreakdown_areaname'] ][ $row2['projectscostbreakdown_itemname'] ] = array();
    $data2[ $row2['projectscostbreakdown_itemdescription'] ][ $row2['projectscostbreakdown_qty'] ]= array();
}
    $data[ $row2['projectscostbreakdown_areaname'] ][ $row2['projectscostbreakdown_itemname'] ][] = $row2['projectscostbreakdown_totalcost'];
    $data2[ $row2['projectscostbreakdown_itemdescription'] ][ $row2['projectscostbreakdown_qty'] ]= array();
}
print '<table width="100%" border="0"><tbody>';
$totalSum = 0;

foreach ( $data as $area => $item ) {
print '<tr style="background-color: white;"><td colspan="7" style="text-align: left;"><br /><br /><b><u>'. $area .'</u></b></td></tr>';
print '<tr style="background-color: #AAAAAA; text-align: center;">
  <td width="20%""><b>Item name</b></td>
  <td width="30%"><b>Description</b></td>
  <td width="5%"><b>Qty.</b></td>
  <td width="10%"><b>Cost/Piece</b></td>
  <td width="10%"><b>Subtotal</b></td>
  <td width="10%"><b>Budget</b></td>
  <td width="15%"><b>Note /<br / >Entered by</b></td>
</tr>';
$totalArea = 0;

foreach ( $item as $item => $totalcost ) {
    //while ( $data = $query->fetch() ) {
    $numbering++;
    $count++;
    $class = ($count%2 == 0)? 'white': '#CCCCCC';
    $sum = array_sum( $totalcost );
    print '<tr style="background-color: '.$class.'">';
    print '<td style="vertical-align: top; text-align: left;">'. $numbering .'. '. $item . '</td>';
    print '<td style="vertical-align: top; text-align: left;">';
    print_r($data2);
    print '</td>';
    print '<td style="vertical-align: top; text-align: right;"></td>';
    print '<td style="vertical-align: top; text-align: right;"></td>';
    print '<td style="vertical-align: top; text-align: right;">'. number_format($sum, 2,'.', ',') . '</td>';
    print '<td style="vertical-align: top; text-align: right;"></td>';
    print '<td style="vertical-align: top; text-align: left;"></td>';
    print '</tr>';
    $totalArea += $sum;
}
print '<tr style="background-color: lightgray; text-align: right;" ><td colspan="6">Section Total: </td><td>'. number_format($totalArea, 2,'.', ',') . '</td></tr>';
$totalSum += $totalArea;
}
print '<tr style="background-color: lightblue; text-align: right;" ><td colspan="6"><b>Grand Total: </b></td><td><b>'. number_format($totalSum, 2,'.', ',') . '</b></td></tr>';
echo '</tbody>
</table>';
?>

更新 现在的输出是这样的。 我需要在输出中包含说明和数量,但无法计算如何完成

第1节
项目名称------说明------数量------小计
第1项------------------------------------------1000
第2项------------------------------------------2000
----------------------------------科室总数:3000

第2节
项目名称------说明------数量------小计
第3项------------------------------------------1000
----------------------------------区段总数:1000
------------------------------------总计:4000完整代码(更结构化,修复了错误):


基本上,我使用了
$itemData=$query->fetchAll()执行后
$query->execute()。现在,如果我们保持一切不变,表将是空的,因为指针位于最后一个元素。因此,我们必须通过编写额外的
$query->execute(),再次执行相同的查询
紧跟在
$itemData=$query->fetchAll()之后


现在,我们有了与您的示例中基本相同的内容,但有一个附加变量
$itemData
,其中包含有关项目的所有信息。现在我们可以使用
$itemData[$numbering]['projectscostbreakdown\u itemdescription']
来显示描述、数量等,其中
$numbering
表示数组的索引号。

您能展示一下您的结果是什么样的吗?这对我来说更容易理解。请参阅更新。谢谢。您能让数据库中的结构更具可读性吗?:)但也许你能给我看一张照片,看看它现在的样子和你想要的样子吗?我仍然发现要完全理解你的问题有一些困难。:)输出看起来像链接。但我需要更多的数据来显示。如描述和数量。谢谢Shello Edvin,非常感谢你的帮助。不幸的是,它仍然无法工作,没有错误,但没有显示任何项目。我从这里得到了代码,然后修改它以满足我的需求。这段代码有效,但我需要显示更多数据(说明、数量等)。一个项目将有数量、价格和总成本(保存在数据库中的数量*价格),$sum=array\u sum($totalcost),将汇总每个部分每个项目的所有总成本。@user366966我明白了。当
指针位于最后一个元素时,它将不返回任何内容。如果您尝试
$data=$query->fetchAll()foreach()
?它不返回任何内容。您认为我可以在“while”中添加需要返回的项目吗,比如$data2[$row2['projectscostbreakdown\u qty']]=array();因为它只在那里工作,但不知道如何添加。我试过了,但它在foreach所在的行中显示了未定义的index projectcostbreakdown\u qty,因此我不能在foreach中声明它。@user366966我实际上可以解决这个问题,但我需要从该表(至少几行)中导出SQL伪数据。我可以在我的测试数据库中检查我自己。非常感谢你的帮助这里有一个sql文本文件,你可以复制这个文件并导入。我使用projectid 42作为示例,让你更容易。
<?php

$projectsid = $_GET['projectrfpid'];
$itemdeleted = 1;
$itemfirstothers = 'OTHERS';
$query = $conn->prepare('SELECT projectscostbreakdown_id,
projectscostbreakdown_projectid,
projectscostbreakdown_areaname,
projectscostbreakdown_itemname,
projectscostbreakdown_itemdescription,
projectscostbreakdown_qty,
projectscostbreakdown_costpiece,
projectscostbreakdown_budgeted,
projectscostbreakdown_totalcost,
projectscostbreakdown_note,
projectscostbreakdown_addedby,
projectscostbreakdown_addeddate,
projectscostbreakdown_deleted,
projectscostbreakdown_lastedit,
projectscostbreakdown_lasteditby
FROM projectscostbreakdown WHERE projectscostbreakdown_projectid=:projectsid && projectscostbreakdown_deleted=:itemdeleted ORDER BY projectscostbreakdown_areaname=:itemfirstothers, projectscostbreakdown_areaname ASC, projectscostbreakdown_id DESC');
$query->bindParam(':projectsid', $projectsid, PDO::PARAM_INT);
$query->bindParam(':itemdeleted', $itemdeleted, PDO::PARAM_INT);
$query->bindParam(':itemfirstothers', $itemfirstothers, PDO::PARAM_INT);
$query->execute();

$data = array();
$data2 = array();

$numbering = 0; //for item count
$count = 1; //counter use for background color
$itemData = $query->fetchAll();
$query->execute();

while ($row2 = $query->fetch()) {
    if (empty($data[$row2['projectscostbreakdown_areaname']]) ) {
        $data[$row2['projectscostbreakdown_areaname']]= array();
        $data2[$row2['projectscostbreakdown_itemdescription']][$row2['projectscostbreakdown_qty']] = array();
    }

    if (empty($data[$row2['projectscostbreakdown_areaname']][$row2['projectscostbreakdown_itemname']])) {
        $data[$row2['projectscostbreakdown_areaname']][ $row2['projectscostbreakdown_itemname']] = array();
        $data2[$row2['projectscostbreakdown_itemdescription']][$row2['projectscostbreakdown_qty']]= array();
    }

    $data[$row2['projectscostbreakdown_areaname']][$row2['projectscostbreakdown_itemname']][] = $row2['projectscostbreakdown_totalcost'];
    $data2[$row2['projectscostbreakdown_itemdescription']][$row2['projectscostbreakdown_qty']] = array();
}

print '<table width="100%" border="0"><tbody>';
$totalSum = 0;

foreach ( $data as $area => $item ) {
    print '<tr style="background-color: white;"><td colspan="7" style="text-align: left;"><br /><br /><b><u>'. $area .'</u></b></td></tr>';
    print '<tr style="background-color: #AAAAAA; text-align: center;">
      <td width="20%""><b>Item name</b></td>
      <td width="30%"><b>Description</b></td>
      <td width="5%"><b>Qty.</b></td>
      <td width="10%"><b>Cost/Piece</b></td>
      <td width="10%"><b>Subtotal</b></td>
      <td width="10%"><b>Budget</b></td>
      <td width="15%"><b>Note /<br / >Entered by</b></td>
    </tr>';
    $totalArea = 0;

    foreach ( $item as $item => $totalcost ) {
        $count++;
        echo $numbering.' ';
        $class = ($count % 2 == 0) ? 'white' : '#CCCCCC';
        $sum = array_sum($totalcost);
        print '<tr style="background-color: '.$class.'">';
        print '<td style="vertical-align: top; text-align: left;">'. $numbering .'. '. $item . '</td>';
        print '<td style="vertical-align: top; text-align: left;">'.$itemData[$numbering]['projectscostbreakdown_itemdescription'].'</td>';
        print '<td style="vertical-align: top; text-align: right;"></td>';
        print '<td style="vertical-align: top; text-align: right;"></td>';
        print '<td style="vertical-align: top; text-align: right;">'. number_format($sum, 2,'.', ',') . '</td>';
        print '<td style="vertical-align: top; text-align: right;"></td>';
        print '<td style="vertical-align: top; text-align: left;"></td>';
        print '</tr>';
        $numbering++;
        $totalArea += $sum;
    }

    print '<tr style="background-color: lightgray; text-align: right;" ><td colspan="6">Section Total: </td><td>'. number_format($totalArea, 2,'.', ',') . '</td></tr>';
    $totalSum += $totalArea;
}
print '<tr style="background-color: lightblue; text-align: right;" ><td colspan="6"><b>Grand Total: </b></td><td><b>'. number_format($totalSum, 2,'.', ',') . '</b></td></tr>';
echo '</tbody></table>';
?>