【问题标题】:Iterating Array in For Loop Returning Null在 For 循环中迭代数组返回 Null
【发布时间】:2026-02-16 18:45:01
【问题描述】:

<?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;
	}
}
?>

我正在尝试填写包含客户信息的表格,但 $value 不断返回 null。被注释掉的 foreach 循环保留在那里,因为这些循环有效,但我无法根据 $i$j 为元素分配 id(显然)。

如果我在$row = $dataset[$i]; 行之后添加console.logjson_encode($row),我会得到一个JSON 对象,其中所有值都已正确填写。一旦我进入嵌套的 for 循环,如果我直接调用它,我就会不断得到 $value$row[$j] 的空值。

存在三元运算符以检查它是否是第一列(ID 列),因为这是唯一不可编辑的单元格。

我曾尝试使用global $row,因为我之前在 PHP 中遇到了范围问题,但它似乎没有解决任何问题。我还尝试重命名$row 变量以确保它与我在页面开头使用$row 时没有冲突,但这也没有解决任何问题。

tl;dr 为什么$valuefor 循环中使用时返回null 而在foreach 循环中使用时却没有返回?

【问题讨论】:

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


    【解决方案1】:

    我已经进行了必要的更改。我希望这会奏效。 :)

    请分别提供&lt;table&gt;&lt;/table&gt;,上面和下面的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>";
    }
    ?>
    

    【讨论】:

      【解决方案2】:

      mysqli_fetch_assoc 返回一个关联数组而不是有序数组:http://php.net/manual/en/mysqli-result.fetch-assoc.php.

      所以关键是表中列的名称,这就是为什么不能使用 for 循环遍历它的原因。请改用 foreach 循环。

      您应该在嵌套循环中出现E_NOTICE 错误(未定义索引)。

      【讨论】:

        最近更新 更多