簡體   English   中英

獲取PHP變量名稱作為許多變量的字符串

[英]Getting PHP variable name as string for many variables

我搜索了許多主題,但到目前為止,還沒有一個主題可以幫助我。

我嘗試了“ 此線程”中的許多選項,但沒有一個是正確的。

我正在為交換機和路由器制作配置生成器,我試圖簡化它,因此,不是為每個接口都配置陣列,而是為每種布局類型都配置數組,並將接口名稱作為變量。 我將網頁發布到腳本,並且將每個帖子的端口布局發布到頁面,每個接口都作為其自己的變量。

$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,而不是為下一個台式機返回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

我不確定這是否適合您,但是在下面的示例中,我剛剛創建了一個foreach()循環來檢查$ints[]的數組值是否為true。 如果是這樣,則將變量名稱和值添加到$ 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

您無法以嘗試的方式獲取變量名。 相反,如果需要保留var名稱,則應該傳遞變量名稱列表進行查看。 然后,生成內容的函數將僅使用數組中的內容。

像這樣的簡單操作將為您提供變量的值及其名稱($ varname在foreach循環中)。 (我不知道$ file,$ pcarray和$ voiparray的來源,因此它們只是示例函數中的全局變量):

$list = ["fa1", "fa2", "fa3", "fa4", "fa5"];
PutFileContentList($list);
function PutFileContentList(array $list) {
    globals $file, $pcarray, $voiparray;
    foreach ($list as $varname) {
        $line = isset($GLOBALS[$varname]) ? $GLOBALS[$varname] : "";
        if ($line == "PC") {
            file_put_contents($file, $pcarray . FILE_APPEND);
        }
        if ($line == "VOIP") {
            file_put_contents($file, $voiparray . FILE_APPEND);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM