0

我在这里遇到了一个独特的情况,我不确定这是否是正确的方法;我愿意接受建议。

我有一个函数,它可以获取数据库中的所有表名并将它们存储到一个数组中。下一个新解析的项目 ($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();
    }
}

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

4

2 回答 2

1

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

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();
    }
}
于 2013-04-25T22:03:01.433 回答
1

带有额外参数的 array_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();
    }
}
于 2013-04-25T23:26:13.063 回答