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>";

...这样您就可以使用键值来提取要显示的匹配值。

如果你不拘泥于你现在拥有的数组结构,你必须像这样构造你的数组,以利用keyandpair值:

$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

将回声线更改为

   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 回答
0

我知道这有点老了,但我相信这段代码会完全按照你想要的方式处理现有数组。

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

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

有什么理由不这样做吗?

于 2013-11-27T23:15:40.323 回答
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 回答