0

データベースからの配列があります

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>

あなたの助けと時間を感謝します。

4

3 に答える 3

1

完全に理解しているかどうかはわかりませんが、これでうまくいくはずです:

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 列を想定しているため、列の総数を柔軟にする必要がある場合は、少し複雑になります。

編集: 実際、配列のインデックスが「セル」の値と一致していないことに気付きました。これを反映するようにコードを修正しましたが、これがデータの外観である場合は、おそらくデータ構造を再評価する必要があります。

于 2013-03-04T15:29:22.507 に答える
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>";

ただし、考えられる問題は、配列内のアイテムが順番に並んでいない場合です。あなたができる最善のことは、それらがそうであることを確認することです。

于 2013-03-04T15:24:34.247 に答える
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>
于 2013-03-04T15:34:20.860 に答える