使用单元格编号将PHP数组数据显示到表格单元格中

时间:2013-03-04 15:20:03

标签: php arrays html-table

我有一个来自数据库的数组

Array
(
    [0] => stdClass Object
        (
            [cell] => 2
            [price] => 1543.65
        )

    [1] => stdClass Object
        (
            [cell] => 3
            [price] => 386.22
        )

)

和A表

<table>
    <tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td>5</td>
    <td>6</td>
    <td>7</td>
    <td>8</td>
    <td>9</td>
    <td>10</td>
    <td>12</td>
    <td>12</td>
    </tr>
    <tr>
    <?php
     print_r($sales);
     if(!empty($sales)) {
        foreach($sales as $sale) {

         if($sale->cell == 1) {echo "<td>".$sale->price."</td>";} else { echo "<td>0</td>"; }
         if($sale->cell == 2) {echo "<td>".$sale->price."</td>";} else { echo "<td>0</td>"; }
         ...
         if($sale->cell == 12) {echo "<td>".$sale->price."</td>";} else { echo "<td>0</td>"; }

        }

    } else {
    for($i=1; $i<=12; $i++) {
        echo "<td>0</td>";
    }
    }
    ?>
    </tr>
    </table>

我需要在数组中显示相同单元格中的价格。现在我的问题是数组大小不是12.请帮助我如何在array['cell']中的同一单元格上显示它?

我想将其显示为:

<tr>
    <td>0</td>
    <td>1543.65</td>
    <td>386.22</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
    </tr>

感谢您的帮助和时间。

3 个答案:

答案 0 :(得分:0)

你可以像这样构建你的行:

echo "<tr>";
for ($i = 0; $i < 12; $i++){
    echo "<td>";
    if(isset($sale[$i]) && $sale[$i]->cell == $i) echo $sale[$i]->price;
    else echo 0;
    echo "</td>";
}
echo "</tr>";

可能的问题是,如果数组中的项目没有按顺序排列。你能做的最好的事情就是确保它们是。

答案 1 :(得分:0)

我不确定我完全理解,但是应该这样做:

echo '<tr>';
foreach($data as $value) {
    $array[$value->cell] = $value->price;
}
for($i = 0; $i <= 12; $i++) {
    echo '<td>';
    if(isset($array[$i])
        echo $array[$i];
    else echo '0';
    echo '</td>';
}
echo '</tr>';

其中$ data是从数据库获得的数组,$ array是相同的数据,但转换为关联数组。这也假设有12列,因此如果列总数需要灵活,则会稍微复杂一些。

编辑:实际上,我刚注意到你的数组的索引与'cell'值不匹配。我修复了我的代码以反映这一点,但如果这是你的数据看起来像你应该重新评估你的数据结构。

答案 2 :(得分:0)

这应该有效

<table>
    <tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td>5</td>
    <td>6</td>
    <td>7</td>
    <td>8</td>
    <td>9</td>
    <td>10</td>
    <td>12</td>
    <td>12</td>
    </tr>
    <tr>
    <?php
    if(!empty($sales)) {
        //Create an array with 12 elements and initialize each with 0
        $salesArray = array_fill(1,12,0);

        foreach($sales as $sale) {
            //Override Cell Number Position in $salesArray so that if Cell number is present in $sales array, then it will have sale price, otherwise 0
            $salesArray[$sale->cell] = $sale->price;
        }

        //Sort it by key. Just in case 
        ksort($salesArray);

        foreach($salesArray as $salePrice)
        {
            echo "<td>".$salePrice."</td>";
        }
    } else {
    for($i=1; $i<=12; $i++) {
        echo "<td>0</td>";
    }
    }
    ?>
    </tr>
    </table>