将PHP变量名称作为许多变量的字符串

时间:2017-01-16 02:03:59

标签: php function

我已经搜索了很多主题,但没有人帮我解决我的具体需求。

我尝试了This Thread中的许多选项,但没有一个是非常正确的。

我正在为交换机和路由器制作配置生成器, 我试图简化它,所以不是为每个接口配置一个配置数组,我将为每种类型的布局配置配置数组,并将接口名称作为变量。 我有网页发布到脚本,我有页面发布每个帖子的端口布局,每个接口作为自己的变量。

$fa1 = "DESKTOP";
$fa2 = "VOIP";
$fa3 = "DESKTOP";
$fa4 = "";
$fa5 = "DESKTOP";

等。我试图使用foreach循环遍历每个接口(如此)

$ints = array($fa1,$fa2,$fa3,$fa4,etc);
foreach ($ints as $line) {
    if ($line == "PC") {
        file_put_contents($file, $pcarray.FILE_APPEND);
    }
    if ($line == "VOIP") {
        file_put_contents($file,$voiparray.FILE_APPEND);
    }
}

将接口设置为数组:

$pcarray = array(
'interface ' .$interface,
'configetc'
);

我需要一个函数来获取接口变量的名称,以便将其分配给$ interface变量。

我迄今为止发现和尝试的所有示例似乎都不兼容类似值的变量。

即。对于上面的内容,大多数会返回fa1用于DESKTOP的所有内容,而不是fa3用于下一个桌面版。

一个不太合适的例子是:

function print_var_name($var) {
    foreach($GLOBALS as $var_name => $value) {
        if ($value === $var) {
            return $var_name;
        } 
    } 
    return false;
}

这一个,对于每个变量值重复后,第一个只返回第一个变量名。

编辑: 我想要回来的将是:

(as the written array)
interface fa1
standard desktop config
interface fa2
standard voip config
interface fa3
standard desktop config
interface fa5
standard desktop config

目前即将到来的地方:

interface fa1
standard desktop config
interface fa2
standard voip config
interface fa1
standard desktop config
interface fa1 
standard desktop config

2 个答案:

答案 0 :(得分:2)

我不确定这是不是您的追随者,但在下面的示例中,我刚刚创建了一个foreach()循环,以检查来自$ints[]的数组值是否为真正。如果是,则将变量名称和值添加到$ varArr数组。所以新数组看起来像["fa1" => "DESKTOP", "fa2" => "VOIP"]。然后循环遍历这个新数组并使用Switch比较该值。请注意,$fa4有意被忽略,但如果需要,可以轻松添加,并使用默认情况进行测试。

$fa1 = "DESKTOP";
$fa2 = "VOIP";
$fa3 = "DESKTOP";
$fa4 = "";
$fa5 = "DESKTOP";

$ints = [$fa1,$fa2,$fa3,$fa4,$fa5];
$varArr; //Variable Name Array

foreach($GLOBALS as $k=>$v) { //Looping through Globals

    if(in_array($v, $ints) && $v !== "") { //If value is in $ints array, add to this array

        $varArr[$k] = $v;
    }  
}

foreach ($varArr as $k=>$v) { //Create Interface File

    file_put_contents($file, "interface ". $k ."\n", FILE_APPEND);

    switch($v) {
        case "DESKTOP":
            file_put_contents($file, "standard desktop config\n", FILE_APPEND);
            break;
        case "VOIP":
            file_put_contents($file, "standard voip config\n", FILE_APPEND);
            break;
    }    
}

输出

interface fa1
standard desktop config
interface fa2
standard voip config
interface fa3
standard desktop config
interface fa5
standard desktop config

答案 1 :(得分:1)

您无法按照自己的方式获取变量名称。如果需要保留var名称,则应该通过变量名称列表来查看。然后,生成内容的函数将只使用数组中的内容。

像这样简单的东西会给你变量的值和它的名字($ varname在foreach循环中)。 (我不知道$ file,$ pcarray和$ voiparray来自哪里,所以他们只是样本函数中的全局变量):

for cycle