Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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 在foreach循环中创建一个数组实例_Php_Arrays_Pdo_Foreach_Unset - Fatal编程技术网

Php 在foreach循环中创建一个数组实例

Php 在foreach循环中创建一个数组实例,php,arrays,pdo,foreach,unset,Php,Arrays,Pdo,Foreach,Unset,我在这里有一个独特的处境,我不确定这是否是正确的方法;我愿意听取建议 我有一个函数,它获取数据库中的所有表名,并将它们存储到数组中。下一个新解析的项($id)将根据此表名数组传递,并且任何匹配项都将从此数组中取消设置。这给我留下了一些已经停产的剩菜 代码如下: function itemDiscontinued($dbh, $id, $detail) { try { $tableList = array(); $result = $dbh->q

我在这里有一个独特的处境,我不确定这是否是正确的方法;我愿意听取建议

我有一个函数,它获取数据库中的所有表名,并将它们存储到数组中。下一个新解析的项($id)将根据此表名数组传递,并且任何匹配项都将从此数组中取消设置。这给我留下了一些已经停产的剩菜

代码如下:

function itemDiscontinued($dbh, $id, $detail) {
    try {   
        $tableList = array();
        $result = $dbh->query("SHOW TABLES");
        while ($row = $result->fetch()) {
            $tableList[] = $row[0];
        }
        $key = array_search($id, $tableList);
        unset($tableList[$key]);
        print_r($tableList);
       }
    catch (PDOException $e) {
        echo $e->getMessage();
    }
}

问题在于,由于函数处于foreach循环(解析过程)中,数组$tablelist会不断地重新创建自身。我只需要创建一个实例就可以使用它。如果这个问题有点难理解,我会先道歉。

是的,真的很难理解。也许你可以试试这个:

function itemDiscontinued($dbh, $id, $detail) {
    static $tables = array();
    if (!$tables) {
        $tables = getTableList($dbh);
    }
    $key = array_search($id, $tables);
    unset($tables[$key]);
    print_r($tables);
}

function getTableList($dbh) {
    try {
        $tableList = array();
        $result = $dbh->query("SHOW TABLES");
        while ($row = $result->fetch()) {
            $tableList[] = $row[0];
        }
        return $tableList;
    } catch (PDOException $e) {
        echo $e->getMessage();
    }
}

一个带有额外参数的数组_push怎么样

function itemDiscontinued($dbh, $id, $detail, $outputArray) {
    try {   
        $result = $dbh->query("SHOW TABLES");
        while ($row = $result->fetch()) {
            array_push($outputArray, $row[0]);
        }
        $key = array_search($id, $outputArray);
        unset($outputArray[$key]);
        return $outputArray; // use this for subsequent run on the foreach statment
       }
    catch (PDOException $e) {
        echo $e->getMessage();
    }
}

只需事先创建它,并将
$tablelist
传递到函数中即可。以下是我迄今为止所得到的信息,即使您建议进行了更改<代码>338142:表格已存在-->无价格变动发现2阵列([0]=>113340[1]=>116516[3]=>20731[4]=>25500[5]=>322320[6]=>322459[7]=>323003[8]=>325958[9]=>325961[10]=>325963[11]=>326002[12]=>326035139431:表格已存在-->无价格变动发现3阵列([0]=>113340[1]=>116516]=>139431=>20731[4]=>25500[5]=>322320[6]=>322459[7]=>323003[8]=>325958[9]=>325961[10]=>325963[11]=>326002[12]=>326035请注意数组是$key之前的数字:)谢谢你!这正是我想要的。它耗尽了该数组的剩余项。:)谢谢dan的努力,但上面的代码是我的解决方案。