转换变量' name to string

时间:2012-01-09 15:17:12

标签: php variables

想象一下我在数组中有3个变量:

 $var1 = "a";
 $var2 = "b";
 $var3 = "c";
 $a = array($var1, $var2, $var3);
 foreach($a as $var)
 {
    //code that create strings with variable names and echo var1 , var2 , var3
 }

使用php可以做到这一点吗?

4 个答案:

答案 0 :(得分:4)

如果您正在查看是否可以从您创建的阵列中调用变量名称,我很遗憾地告诉您这一点,但这是不可能的(至少,就像您的示例所示) )。当您创建该数组时,您正在对这些变量进行复制并将它们存储在数组中。你实际上并没有指向原始变量。

我头脑中的几个选项。

选项1:使用变量名作为键创建数组。

选项2:事先将变量名称分配给变量本身。例如:$var1->VAR_NAME = 'var1';

选项3:尝试类似于此处建议的解决方法:How to get a variable name as a string in PHP?

选项4:如果您只需要它来引用原始变量,请尝试使用&捕获对象本身的引用。

希望有所帮助。

答案 1 :(得分:3)

当您运行$a = array($var1 ..时,这些值会写入$a,我相信原始符号表名称$var1会单独保存。这意味着没有,此时无法获取原始变量名称。你必须提前做,或用get_defined_vars做一些疯狂的黑魔法:

$var1 = 'a';
...
$varnames = array('var1', 'var2', 'var3');
$a = compact($varnames);
//$a now has array('var1' => 'a' ...

答案 2 :(得分:1)

如果您可以存储这样的变量:

   $array = array(
    'a' => 'apple',
    'b' => 'banana',
    'c' => 'carrot',
    'd' => 'date',
    'e' => 'elephant');

您可以使用key函数检索任何类型循环内当前数组元素的索引/键,请参阅#1,或使用key => value中的foreach()语法循环,见#2:

<?php
   $array = array(
    'a' => 'apple',
    'b' => 'banana',
    'c' => 'carrot',
    'd' => 'date',
    'e' => 'elephant');

    /* #1 */
    foreach($array as $value) {
       /* get the key for the item at the cursor position of the array */
       $key = key($array);
       print "{$key} = {$value}<br>";
       /* move the cursor to the next item in the array */
       next($array);
    }

    /* #2 */
    foreach($array as $key => $value) {
       print "{$key} = {$value}<br>";
    }

?>

如果您只是想获取变量名,则无法将值存储在数组中并维护变量名,一旦将值放入数组中,它们就会丢失变量名。

在数组之外,您可以使用以下解决方案(来自http://www.php.net/manual/en/language.variables.php#76245):

<?
  $myVarName = "myValue";
  echo var_name($myVarName) . " = {$myVarName}";

  function var_name(&$var, $scope=0)
     {
       $old = $var;
       if (($key = array_search($var = 'unique'.rand().'value', !$scope ? $GLOBALS : $scope)) && $var = $old) return $key; 
     }
?>

答案 3 :(得分:0)

$a = array($var1, $var2, $var3);
foreach($a as $key => $value) {
    echo($key . ' => ' . $value);
}