0

さまざまなサイトの評価スコアを表示する表を作成する必要がありますが、すべてのサイトに毎月のデータがあるわけではありません。正しい月の列にデータを取得し、データのない空白のセルを表示するにはどうすればよいですか?

これはサンプル配列です:

Array
(
[Site 1] => Array
    (
        [1] => 89
        [3] => 84
        [4] => 96
        [6] => 91
        [8] => 90
        [12] => 99
    )

[Site 2] => Array
    (
        [1] => 90
        [3] => 93
        [4] => 88
    )

[Site 3] => Array
    (
        [1] => 92
        [3] => 92
        [4] => 89
        [6] => 94
        [8] => 86
    )

[Site 4] => Array
    (
        [1] => 93
        [2] => 88
        [3] => 92
        [4] => 89
        [5] => 93
        [6] => 94
        [8] => 90
        [12] => 91
    )

)

そして、これは私がphpで得た限りです。for ループに問題があることはわかっていますが、どうすればよいかわかりません。どんな助けでも大歓迎です。

echo "<table width='100%' border='1'>";
echo "<tr><th>Sites</th><th>Jan</th><th>Feb</th><th>Mar</th><th>Apr</th><th>May</th><th>Jun</th><th>Jul</th><th>Aug</th><th>Sep</th><th>Oct</th><th>Nov</th><th>Dec</th>";  

foreach($report as $site=>$array)
{
    echo "<tr><td>$site</td>";

    foreach($array as $month=>$score)
    {
        for($i=1;$i<=12;$i++)
        {
            if($month==$i)
            {
                echo "<td>$score</td>";
            }
            else
            {
                echo "<td>&nbsp;</td>";
            }
        }           
    }       
    echo "</tr>";
}   

echo "</table>";
4

2 に答える 2

1

各 に月が存在するかどうかを確認する必要があります$i。あなたがしているのは、それぞれが各月に等しいかどうかを確認することです。もちろん $iこれはほとんど常に偽であり、膨大な数の空のセルが生成されます。作成したセルの合計数 (行ごと) を確認してください: 獲得したサイトの月数に 12 を掛けたものです。

これを行う適切な方法は次のとおりです。

echo "<table width='100%' border='1'>";
echo "<tr><th>Sites</th><th>Jan</th><th>Feb</th><th>Mar</th><th>Apr</th><th>May</th><th>Jun</th><th>Jul</th><th>Aug</th><th>Sep</th><th>Oct</th><th>Nov</th><th>Dec</th>";

foreach($report as $site=>$array)
{
    echo "<tr><td>$site</td>";

    for($i=1;$i<=12;$i++)
    {
        if (isset($array[$i]))
        {
            echo "<td>".$array[$i]."</td>";
        }
        else
        {
            echo "<td>&nbsp;</td>";
        }
    }
    echo "</tr>";
}

echo "</table>";

または、より短い、

echo "<table width='100%' border='1'>";
echo "<tr><th>Sites</th><th>Jan</th><th>Feb</th><th>Mar</th><th>Apr</th><th>May</th><th>Jun</th><th>Jul</th><th>Aug</th><th>Sep</th><th>Oct</th><th>Nov</th><th>Dec</th>";

foreach($report as $site=>$array)
{
    echo "<tr><td>$site</td>";

    for($i=1;$i<=12;$i++)
    {
        echo "<td>".(isset($array[$i]) ? $array[$i] : '&nbsp;')."</td>";
    }
    echo "</tr>";
}

echo "</table>";
于 2013-10-01T00:13:14.490 に答える
0

for ループで、キーが issset または array_key_exists で存在することを検証します

foreach($array as $score){

    for($i=1;$i<=12;$i++){

        if(array_key_exists($i,$score)){
            echo '<td>'.$scode[$i].'<td>';
        }else{
            echo "<td>&nbsp;</td>";
        }
    }

}
于 2013-10-01T00:13:35.043 に答える