2017-01-16 4 views
1

私は多くのトピックを検索してきましたが、私の具体的なニーズはまだ分かりませんでした。多くの変数の文字列としてPHP変数名を取得する

This Threadから多くのオプションを試しましたが、どれも正しいものはありませんでした。

私はそれを合理化しようと、そうではなく、各インターフェイスの設定の配列を持っています 、スイッチやルータの設定ジェネレータを作っています、私は、レイアウトの種類ごとに設定配列を持っており、インタフェース名を持っています変数として。 私はスクリプトに投稿しているWebページを持っており、ポストごとにポートレイアウトを掲示するページを持っています。

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

すなわち

私は配列としてのインターフェイスの設定と(など)各インターフェイスを経由する

$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); 
    } 
} 

をforeachループを使用しようとしています:

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

インターフェイスの変数の名前を取得する関数が必要なので、$ interface変数に割り当てることができますル。

私が見つけて試したすべての例は、これまでのところ価値のある変数と互換性がないようです。

ie。上記の場合、ほとんどの場合、次のデスクトップの場合はfa3ではなくDESKTOPになるすべてについてfa1が返されます。

かなりいけない私が望むどのように動作するものの例は次のとおりです。

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

最初の後の各変数値の繰り返しのためにこの1つは、単に最初の変数名を返しました。

EDIT: だろう私は戻って取得したいのです:

現在取得イムとして
(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 
+0

あなたの質問は、あなたが望むが、無回答の多くを持っていた理由はおそらくこれは非常に明確ではありません。私はあなたが何をしようとしているのかを理解することができると思う。だから、変数名を '$ interface'変数に代入するときに値が重複することは望ましくありません。例えば'fa1'が既に' DESKTOP'に割り当てられている場合、 'fa3'を使用しますか? – Kitson88

+0

確かに、アイデアはすべての同様のインターフェイスに1つのテンプレートを使用し、毎回(foreachループ内で) のようにインターフェイス値を割り当てるだけなので、fa1、fa2、fa3で1ラウンドを実行しますが、インタフェースは値を持つインタフェースのみを割り当てるようにします。 ie。 fa5が使用されていないのにfa6がデスクトップの場合fa5をスキップします(その部分は私のために働いていました) ここで、他のすべての方法では、毎回fa1を置いたままの値それはデスクトップの値を渡って来る –

答えて

2

私はこれがどのようなあなたの後にあるかどうかわからないんだけど、中に以下の例では、$ints[]の配列値がtrueであるかどうかを調べるためにループを作成しました。foreach()です。その場合は、変数名と値を$ varArr配列に追加します。したがって、新しい配列は["fa1" => "DESKTOP", "fa2" => "VOIP"]のようになります。この新しい配列をループし、スイッチを使用して値を比較します。 $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

グローバルに設定されたすべてのポスト値をカウントするために、インターフェイスライン用のファイルputコンテンツの周りにifブロックを追加しなければなりませんでしたが、一度それが美しく機能したら、ありがとうございました。 '場合(!$ K = "DESKTOP && $ K =! "VOIP"){内容file_put ($ファイル、 "インターフェイス\ n」は、FILE_APPEND" $ K。"); }' また、インターフェイス名がFastEthernet0/XIであるため、上記のスイッチブロックを入れましたが、期待通りに動作しました。ありがとうございました:) –

+0

これはうまく動作します。 1つの質問、 foreachが2つの配列を実行する方法はありますか? 連絡先番号の説明がある場合 連絡先番号はinterface + des(つまり$ fa02des、$ fa03desなど)として表示されます。 そのコンピュータであればoesは説明を得ていないので、そのポートに適した設定レベルで説明を適用したい(変数は$ voiparrayで扱われます) か、それほど難しく、それぞれにスイッチ/ケースを使うべきです個別にポート? –

+1

こんにちはクレイグ、別の質問をサンプル出力で投稿すると、あなたを探してみることができます。私はそれが不可能であるか、それほど難しいとは言いません。あなたが必要とするものについて論理を掴んでいるだけです。投稿されると、あなたの新しい質問へのリンクで自分の答えをコメントしてください。 – Kitson88

1

に。 var名を保持する必要がある場合は、代わりに変数名のリストを渡して見てください。あなたのコンテンツを生成する関数は、配列内にあるものだけを使用します。

このように簡単なことは、変数の値とその名前($ varnameはforeachループにあります)の両方を与えることでしょう。 (私は$ファイルは、$ 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); 
     } 
    } 
} 
+0

$ファイルは、他の指定されたファイルは、このために必要なと思っていない、 はvoipとpcの配列と同じです、彼らは構成ファイルの配列です。 –

+0

試してみました $ GLOBALS [$ varname]は実際に変数の実際の名前ではなく、$ varnameのグローバルを検索しています。 –

+0

リストはPHPで変数名を取得できないため、変数名のリストです。 –

関連する問題