Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在数组中没有更多值时使while循环停止,从而阻止while循环内隐运行_Php_Arrays - Fatal编程技术网

Php 如何在数组中没有更多值时使while循环停止,从而阻止while循环内隐运行

Php 如何在数组中没有更多值时使while循环停止,从而阻止while循环内隐运行,php,arrays,Php,Arrays,我试图在{数组中还有值的情况下,使用do{…}从数组中生成pull key=>值对 我使用一个函数来查询mysql,然后在数组中插入所有值 function table_array($query) { $table_array = array(); $data_fetched = false; while ($array = mysql_fetch_assoc($query)) { if (!$data_fetched) { fo

我试图在{数组中还有值的情况下,使用do{…}从数组中生成pull key=>值对

我使用一个函数来查询mysql,然后在数组中插入所有值

function table_array($query) {

    $table_array = array();
    $data_fetched = false;
    while ($array = mysql_fetch_assoc($query)) {
        if (!$data_fetched) {
            foreach ($array as $key => $value) {
                $table_array[$key] = $value;
                //$data_fetched = true;
                } 
            }
        }
    return $table_array;
}
然后我使用另一个循环从数组中提取数据

function get_table($table_array) {


    $header_written = false;
    echo "<table border=1>";

    if ($table_array) {

        do {
            echo "<tr>";
            foreach ($table_array as $columns => $values) {
                echo "<td> {$values} </td>";
                }
                echo "</tr>";

        }while ($table_array);

        }
        echo "</table>";
    }
函数get\u table($table\u数组){ $header_writed=false; 回声“; if($table_数组){ 做{ 回声“; foreach($table_数组作为$columns=>$values){ 回显“{$values}”; } 回声“; }while($table_数组); } 回声“; } 然而,这导致我的循环无限运行,为什么我不能像在mysql_fetch_assoc为真时那样使用它呢


我尝试使用标志,但这将在仅提取一条记录后停止运行。

您需要使用
foreach($key=>$value){…}
do{…}while($array)

您不应该同时使用这两种方法,因为您只有一组数据要循环。我会坚持使用foreach,因为它更安全,并且可以完全满足您的需要


如果您觉得需要使用do/while,那么每次进入循环时,您都需要从$table_数组中弹出一个值。这样,$table_数组在某个点上会变为空。目前,在您的代码中,$table_数组总是满的,因此while循环将无休止地继续。

这里您真正需要的是两个
foreach
循环s、 外部迭代行,内部迭代列:

echo "<table>";
// Iterates over rows
foreach ($table_array as $row) {
  echo "<tr>";
  // Iterates over columns (table cells)
  foreach ($row as $col=>$value) {
    echo "<td>{$value}</td>";
  } 
  echo "</tr>";
}
echo "</table>";

最后,它没有像设置do while那样工作的原因是,在常规数组上迭代与从MySQL结果集中获取不同。当没有行保留时,获取调用最终将返回FALSE。除非在迭代数组时主动从数组中删除元素,并最终删除空数组,它的计算结果将始终为布尔真。

foreach(..{..};将只运行一次它需要嵌套在while或do…while循环中才能运行数组中的foreach值。现在它只从数组返回一个key=>值对。我遇到的问题只是第二个函数,该函数接受已从mysql提取的值。根据您的解决方案,我仍然存在这个问题它仍然只是多次输出相同的值,而不是迭代array@PHPSushaRolls如果每次都输出相同的值,那么要么1)您没有完全复制我的代码,要么2)您的结果数组没有您认为的结构。
var\u dump($table\u array)
以查看其内部的实际内容。
 while ($array = mysql_fetch_assoc($query)) {
        // Use the [] syntax to append the whole row onto $table_array
        // No need to add each column of the fetched row separately
        $table_array[] = $array;        
  }