如何使用php清除某些php变量(不是所有PHP变量)?
我有许多php变量
EG: $a,$b,$c,$d.$e,$f,$g,$h,$i,$j我想清除所有php变量,而不是清除$a,$c,$d。
我使用这段代码但不起作用,我该怎么做?
<?PHP
$a = "1";
$b = "2";
$c = "3";
$d = "4";
$e = "5";
$f = "6";
$g = "7";
$h = "8";
$i = "9";
$j = "10";
$dontDelete = array('a' , 'c' , 'd');
foreach ($ as $key=>$val)
{
if (!in_array($key,$dontDelete))
{
unset($[$key]);
}
}
?>发布于 2014-10-28 16:49:25
$defined_variables = get_defined_vars();
$variables2keep = array("a", "b", "c", "variables2keep");
foreach ($defined_variables as $variable => $value) {
if (! in_array($variable, $variables2keep)) {
unset($$variable);
}
}发布于 2014-10-28 16:49:28
我认为它不能工作的主要原因是您不能以这种方式引用变量名。如果这些名称仅仅是单个关联数组中的索引,它可能会工作。否则,我建议您简单地列出所有变量,并手动取消它们。
发布于 2014-10-28 17:18:12
我知道你已经接受了一个答案,但这是一个very risky approach。这里有一个替代方案,它不会破坏所有的超全局变量和其他要删除的非预期变量。
$arrWhitelist = array("a", "b", "c");
$file = file_get_contents(__FILE__);
preg_match_all('/\$[A-Za-z_]{1}/', $file, $vars);
foreach($vars[0] as $variables) {
$variables = ltrim($variables, "$");
if(in_array($variables, $arrWhitelist) == FALSE ) {
unset($$variables);
}
}例如;
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$a = "1";
$b = "2";
$c = "3";
$d = "4";
$e = "5";
$f = "6";
$g = "7";
$h = "8";
$i = "9";
$j = "10";
$arrWhitelist = array("a", "b", "c");
$file = file_get_contents(__FILE__);
preg_match_all('/\$[A-Za-z_]{1}/', $file, $vars);
foreach($vars[0] as $variables) {
$variables = ltrim($variables, "$");
if(in_array($variables, $arrWhitelist) == FALSE ) {
unset($$variables);
}
}
echo $a; //Output: 1
echo $g; //Ouput: Notice: Undefined variable: g in C:\xampp\htdocs\test.php on line 29https://stackoverflow.com/questions/26613811
复制相似问题