Php 我能';不要将嵌套循环用作foreach

Php 我能';不要将嵌套循环用作foreach,php,foreach,nested,Php,Foreach,Nested,问题很简单。答案是否定的 我有一个多(2)维数组。 代码很简单(第28-32行): 根据 返回一个关联数组,该数组对应于获取的行或 如果没有更多行,则为NULL 因此,对于循环中最后为null的$value元素,您将抛出该错误 因此,只需将其包装在if语句中,如下所示: foreach ($select_all_tables as $a) { $q = $con->query("SHOW CREATE TABLE `$a`"); $show_create_table[] =

问题很简单。答案是否定的

我有一个多(2)维数组。 代码很简单(第28-32行):

根据

返回一个关联数组,该数组对应于获取的行或 如果没有更多行,则为NULL

因此,对于循环中最后为null的
$value
元素,您将抛出该错误

因此,只需将其包装在
if
语句中,如下所示:

foreach ($select_all_tables as $a) {
    $q = $con->query("SHOW CREATE TABLE `$a`");
    $show_create_table[] = $q->fetch_assoc()['Create Table'];
    $q = $con->query("SELECT * FROM `$a`");
    while ($row = $q->fetch_assoc()) {
        $select_all_data[] = $row;
    }
}

或者甚至可能
是数组($value)
以确保您能够迭代…数组具有不同的键数。我想是因为我忘了在第一个foreach中循环查询(在while之后)

所以我把它改成了


这就是解决办法

是否可能有些
$value
是数组,有些不是数组?@jh1711这是不可能的。我在循环中添加了is_数组,它们都显示为true如果
$row
为null,while循环将结束,并且null不会附加到数组中。
<?php
$DB_HOST = "";
$DB_USER = "";
$DB_PASS = "";
$DB_NAME = "";

$con = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($con->connect_errno > 0) {
  die('Connection failed [' . $con->connect_error . ']');
}

$select_all_tables = array();
$select_all_data = array();
$show_tables_from = $con->query("SHOW TABLES FROM `$DB_NAME`");
while ($row = $show_tables_from->fetch_assoc()) {
    $select_all_tables[] = $row['Tables_in_'.$DB_NAME.''];
}
foreach ($select_all_tables as $a) {
    $q = $con->query("SHOW CREATE TABLE `$a`");
    $show_create_table[] = $q->fetch_assoc()['Create Table'];
    $q = $con->query("SELECT * FROM `$a`");
    $select_all_data[] = $q->fetch_assoc();
}
echo "<pre>";
//var_dump($a);
//var_dump($show_create_table);
//var_dump($select_all_data);
foreach($select_all_data as $key => $value) {
    var_dump($value);
}
?>
if (!is_null($value)) {
    foreach ($value as $v => $k) {
        $all_values = $v.",";
    }
}
foreach ($select_all_tables as $a) {
    $q = $con->query("SHOW CREATE TABLE `$a`");
    $show_create_table[] = $q->fetch_assoc()['Create Table'];
    $q = $con->query("SELECT * FROM `$a`");
    while ($row = $q->fetch_assoc()) {
        $select_all_data[] = $row;
    }
}