<?php
//Called at start of page
while( $row = mysqli_fetch_assoc($result)){
$dataset[] = $row;
}
//Called in middle of page, inside <table><tbody>
$dSize = count($dataset);
for( $i = 0; $i < $dSize; $i++){
//foreach($dataset as $row){
$row = $dataset[$i];
$thisIsId = true;
echo "<tr>";
$rSize = count($row);
for( $j = 0; $j < $rSize; $j++){
//foreach($row as $value){
$value = $row[$j];
//Next line output ex: <td id='r1c2' class='editable'>Bob
echo "<td id='r$i" . "c$j'" . ($thisIsId ? "" : " class='editable'") . ">$value";
$thisIsId = false;
}
}
?>
&#13;
我试图填写一个包含客户信息的表格,但$ value会一直返回null
。注释掉的foreach
循环留在那里,因为这些循环有效,除了我无法根据$i
和$j
(显然)为元素分配ID。
如果我在行console.log
之后添加json_encode($row)
$row = $dataset[$i];
,我会得到一个JSON对象,其中所有值都已正确填写。一旦我进入嵌套for循环,我会立即获得$value
和$row[$j]
的空值,如果我直接调用它。
三元运算符用于检查它是否是第一列(ID列),因为它是唯一不可编辑的单元格。
我尝试过使用global $row
因为我之前遇到过PHP范围问题,但它似乎没有解决任何问题。我还尝试重命名$row
变量,以确保它与我在页面开头使用$row
时没有冲突,但这也没有解决任何问题。
tl; dr 为什么$value
在null
循环中使用时会返回for
,但在foreach
循环中使用时却不会?< / p>
答案 0 :(得分:1)
mysqli_fetch_assoc返回一个关联数组,而不是有序数组:http://php.net/manual/en/mysqli-result.fetch-assoc.php。
所以键是表中列的名称,这就是为什么你不能使用for循环遍历它。请改用foreach循环。
您的嵌套循环中应该出现E_NOTICE
错误(未定义的索引)。
答案 1 :(得分:0)
我做了必要的改变。我希望这会奏效。 :)
请分别在上面提供<table>
和</table>
以及php代码。
while( $row = mysqli_fetch_assoc($result)){
$dataset[] = $row;
}
//Called in middle of page, inside <table><tbody>
$dSize = count($dataset);
$i = 1;
foreach($dataset as $row){
$thisIsId = true;
echo "<tr>";
$j = 1;
foreach($row as $key=>$value){
//Next line output ex: <td id='r1c2' class='editable'>Bob
echo "<td id='r$i" . "c$j'" . ($thisIsId ? "" : " class='editable'") . ">$value</td>";
$thisIsId = false;
$j++;
}
$i++;
echo "</tr>";
}
?>