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

时间:2013-04-25 21:56:38

标签: php arrays pdo foreach unset

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

我有一个函数,它可以抓取数据库中的所有表名并将它们存储到数组中。下一个新解析的项($ 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循环(解析过程)而不断重新创建。一旦创建它我只需要它的一个实例。如果问题有点难以理解,我会事先道歉。

2 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分: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();
    }
}