Php 如何在数组中没有更多值时使while循环停止,从而阻止while循环内隐运行
我试图在{数组中还有值的情况下,使用do{…}从数组中生成pull key=>值对 我使用一个函数来查询mysql,然后在数组中插入所有值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
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;
}