0

データベースに ts_rounds というテーブルがあり、次の構造になっています

round | current
===============
P     | 0
1     | 1
2     | 0
3     | 0
4     | 0

私は<div>2つの異なる条件で特定の取り決めをエコーし​​ようとしています:

  1. 1 つの現在の値は 1 で、残りは 0 です

  2. すべての電流が 0、複数の電流値が 1

条件が満たされたら、if ステートメントから抜け出したいと思います。

これはこれまでの私のコードです。最初の条件は満たされていますが、2 番目の条件を満たすのに問題があります。

<div id="timeline">

<?php
    $sql = "SELECT * from ts_rounds";
    $result = $pdo->query($sql);
    foreach ($result as $row) 
    {
        if ($row["round"] == "P" && $row["current"] == "1") {
        echo 
            '
            <div id="r0" class="circle">
    <h3>P</h3>
    </div>
    <div id="r1" class="circle_small"><h3>1</h3></div>
    <div id="r2" class="circle_small"><h3>2</h3></div>
    <div id="r3" class="circle_small"><h3>3</h3></div>
    <div id="r4" class="circle_small"><h3>4</h3></div>
    <div id="r5" class="circle_small"><h3>A</h3></div>
    <hr id="line">
    '; 
            }
        else if ($row["round"] == "1" && $row["current"] == "1") {
        echo 
            '
            <div id="r0" class="circle_small">
    <h3>P</h3>
    </div>
    <div id="r1" class="circle"><h3>1</h3></div>
    <div id="r2" class="circle_small"><h3>2</h3></div>
    <div id="r3" class="circle_small"><h3>3</h3></div>
    <div id="r4" class="circle_small"><h3>4</h3></div>
    <div id="r5" class="circle_small"><h3>A</h3></div>
    <hr id="line">
    ';
            } 
        else if ($row["round"] == "2" && $row["current"] == "1") {
        echo 
            '
            <div id="r0" class="circle_small">
    <h3>P</h3>
    </div>
    <div id="r1" class="circle_small"><h3>1</h3></div>
    <div id="r2" class="circle"><h3>2</h3></div>
    <div id="r3" class="circle_small"><h3>3</h3></div>
    <div id="r4" class="circle_small"><h3>4</h3></div>
    <div id="r5" class="circle_small"><h3>A</h3></div>
    <hr id="line">
    '; 
            }
        else if ($row["round"] == "3" && $row["current"] == "1") {
        echo 
            '
            <div id="r0" class="circle_small">
    <h3>P</h3>
    </div>
    <div id="r1" class="circle_small"><h3>1</h3></div>
    <div id="r2" class="circle_small"><h3>2</h3></div>
    <div id="r3" class="circle"><h3>3</h3></div>
    <div id="r4" class="circle_small"><h3>4</h3></div>
    <div id="r5" class="circle_small"><h3>A</h3></div>
    <hr id="line">
    '; 
            }
        else if ($row["round"] == "4" && $row["current"] == "1") {
        echo 
            '
            <div id="r0" class="circle_small">
    <h3>P</h3>
    </div>
    <div id="r1" class="circle_small"><h3>1</h3></div>
    <div id="r2" class="circle_small"><h3>2</h3></div>
    <div id="r3" class="circle_small"><h3>3</h3></div>
    <div id="r4" class="circle"><h3>4</h3></div>
    <div id="r5" class="circle_small"><h3>A</h3></div>
    <hr id="line">
    </div>'; 
            }
        else if ($row["round"] == "A" && $row["current"] == "1") {
        echo 
            '
            <div id="r0" class="circle_small">
    <h3>P</h3>
    </div>
    <div id="r1" class="circle_small"><h3>1</h3></div>
    <div id="r2" class="circle_small"><h3>2</h3></div>
    <div id="r3" class="circle_small"><h3>3</h3></div>
    <div id="r4" class="circle_small"><h3>4</h3></div>
    <div id="r5" class="circle"><h3>A</h3></div>
    <hr id="line">
    '; 
            }
        else {
            $rounds = '
            <div id="r0" class="circle_small">
    <h3>P</h3>
    </div>
    <div id="r1" class="circle_small"><h3>1</h3></div>
    <div id="r2" class="circle_small"><h3>2</h3></div>
    <div id="r3" class="circle_small"><h3>3</h3></div>
    <div id="r4" class="circle_small"><h3>4</h3></div>
    <div id="r5" class="circle_small"><h3>A</h3></div>
    <hr id="line">
    ';
        }
    }

    ?>
</div>
4

2 に答える 2

1

特にHTMLは基本的にバージョン間でわずかに変更されるだけなので、非常に反復性の高いコードです。なぜもっと似たようなものではないのですか

$sql = "SELECT current, round FROM yourtable"
$results = array()
while($row = fetch($result)) {
   $results[$row['current']][] = $row['round'];
}

それはあなたに配列を与えるでしょう

0: p, 2, 3, 4
1: 1

そこから、出力ロジックは単に「現在出力している0/1の値」になり、必要に応じてhtmlを調整します。バリエーションごとにhtmlブロックを5回繰り返す必要はありません。

于 2013-02-14T17:45:33.933 に答える
1

あなたが探しているのは、これらの行にあるものだと思います:

$circleSize = array ('circle_small', 'circle');
$rounds = '';
foreach ($result as $row) {

    switch ($row['round']) {
        case 'P':
            $rounds .=   '<div id="r0" class="'.$circleSize[$row['current']].'"><h3>P</h3></div>';break;
        case '1':
            $rounds .=   '<div id="r1" class="'.$circleSize[$row['current']].'"><h3>1</h3></div>';break;
        case '2':
            $rounds .=   '<div id="r2" class="'.$circleSize[$row['current']].'"><h3>2</h3></div>';break;
        case '3':
            $rounds .=   '<div id="r3" class="'.$circleSize[$row['current']].'"><h3>3</h3></div>';break;
        case '4':
            $rounds .=   '<div id="r4" class="'.$circleSize[$row['current']].'"><h3>4</h3></div>';break;
        case 'A':
            $rounds .=   '<div id="r5" class="'.$circleSize[$row['current']].'"><h3>A</h3></div>';break;
    }
}
echo $rounds;
于 2013-02-14T18:05:42.553 に答える