在for循环返回Null中迭代数组

时间:2016-07-10 17:28:39

标签: php arrays for-loop multidimensional-array foreach



<?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;
&#13;
&#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 为什么$valuenull循环中使用时会返回for,但在foreach循环中使用时却不会?< / p>

2 个答案:

答案 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>";
}
?>