1

テーブルとして出力しようとしている多次元配列があります。これが私の配列です。

$marksarray=     
array(3) {
      [0]=>
      array(2) {
        [0]=>
        string(1) "8"
        [1]=>
        string(1) "0"
      }
      [1]=>
      array(2) {
        [0]=>
        string(1) "9"
        [1]=>
        string(1) "1"
      }
      [2]=>
      array(2) {
        [0]=>
        string(2) "13"
        [1]=>
        string(1) "2"
      }
    }

これまでのところ、私はこのようなコードを持っています。

echo "<table><tr><td>Question</td><td>Rating</td></tr>";
     foreach ($marksarray as $mks){
         foreach ($mks as $qid=>$rate){
            echo "<tr><td>".$qid."</td><td>".$rate."</td></tr>";
          }
    }
echo "</table></div>";

しかし、私の出力は次のとおりです。 ここに画像の説明を入力してください

私が間違っているのは何ですか?

4

6 に答える 6

6

そこには が多すぎますforeach。代わりにこれを試してください:

echo "<table><tr><td>Question</td><td>Rating</td></tr>";
     foreach ($marksarray as $mks){
        echo "<tr><td>".$mks[0]."</td><td>".$mks[1]."</td></tr>";
    }
echo "</table></div>";

編集

今後の参考のために、意味のあるキーを持つ連想配列の配列を使用すると、コードがはるかに理解しやすくなります。例えば

$marksarray = array(
    array('qid' => 8, 'rating' => 0), 
    array('qid' => 9, 'rating' => 1), 
    array('qid' => 13, 'rating' => 2)
);

次に、ループは次のようになります。

foreach ($marksarray as $mark){
    echo "<tr><td>".$mark['qid']."</td><td>".$mark['rating']."</td></tr>";
}

さらに良いことに、MVC (モデル、ビュー、コントローラー) を使用して、このデータをビューに渡す必要がありますが、それはまったく別の問題です。

于 2012-12-07T16:41:38.737 に答える
1

echo配列を使用すると、実際の値ではなく が出力されますkey。したがって、最初の列に「0」と「1」が表示されるのはなぜですか。

現在の配列レイアウトに固執している場合は、次のコードが必要です。

echo "<table><tr><td>Question</td><td>Rating</td></tr>";
     foreach ($marksarray as $mks){
        echo "<tr><td>".$mks[0]."</td><td>".$mks[1]."</td></tr>";
     }
echo "</table></div>";

...キー値を利用して、表示したい一致する値を引き出すようにします。

key現在の配列構造にこだわらない場合は、とのpair値を利用するために、配列を次のように構造化する必要があります。

$marksarray = array(
    "8" => 0,
    "9" => 1,
    "13" => 2,
);

コードを使用します。

echo "<table><tr><td>Question</td><td>Rating</td></tr>";
     foreach ($marksarray as $qid => $rate){

        echo "<tr><td>".$qid."</td><td>".$rate."</td></tr>";

     }
echo "</table></div>";

...このようにして、コード内の値keypair値を明確に参照しています。

于 2012-12-07T16:43:28.800 に答える
0

このコードを使用してみてください

function printmarraytable($data){
                            echo "<table>";
                            foreach($data as $key=>$value){
                                echo "<tr><td>".$key."</td>";
                                if(is_array($value) || is_object($value)){
                                    echo "<td>".printmarraytable($value)."     </td>";
                                }else{
                                    echo "<td>".$value."</td></tr>";
                                }
                            }
                            echo "</table>";
                          }
                          printmarraytable($req);
于 2015-06-26T23:22:26.477 に答える
0

エコー行をに変更します

   echo "<tr><td>".$rate[0]."</td><td>".$rate[1]."</td></tr>";

それは働いていますか?

于 2012-12-07T16:42:36.093 に答える
0

これは正しく出力されており、ループは正常に見えます。あなたの配列で何をするつもりだと思うかは、次のようなものです。

$marksarray = array(
    "8" => "0",
    "9" => "1",
    "13" => "2"
);

次に、ループを次のように変更します。

echo "<table><tr><td>Question</td><td>Rating</td></tr>";
         foreach ($marksarray as $qid=>$rate){
            echo "<tr><td>".$qid."</td><td>".$rate."</td></tr>";
          }
echo "</table></div>";
于 2012-12-07T16:43:23.017 に答える