我在这里有一个独特的情况,我不确定这是否是正确的方法;我愿意接受建议。
我有一个函数,它可以抓取数据库中的所有表名并将它们存储到数组中。下一个新解析的项($ 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循环(解析过程)而不断重新创建。一旦创建它我只需要它的一个实例。如果问题有点难以理解,我会事先道歉。
答案 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();
}
}