2012-01-09 132 views
1

想象,我有一个数组中的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?

+2

这个问题很不清楚。你可以提供一段代码,将*变量放入数组中。 – 2012-01-09 15:22:05

+0

同意@ÁlvaroG.Vicario,请更具体地说明您要实现的目标。 – Oldskool 2012-01-09 15:34:08

回答

4

如果你想看看,如果你能回忆起您创建的数组变量的名字,我很抱歉告诉你这一点,但这是不可能的(至少,就像你的例子那样)。当你创建该数组时,你正在制作这些变量的副本并将它们存储在数组中。你实际上并没有指向原始变量。

几个选项的头顶。

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

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

方案3:尝试一种解决方法就像一个建议这里:How to get a variable name as a string in PHP?

方案4:如果你只需要它引用原始变量,尝试捕获参考自身使用&的对象。

希望有所帮助。

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

这不是我的答案:( – 2012-01-09 15:28:02

+0

所以,我没有承诺你的问题。 – 2012-01-09 15:40:56

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>"; 
    } 

?> 

如果你只是想获得一个变量名,你不能STOR e数组中的值并维护变量名称,一旦将值放入数组中,它们将失去变量名称。

之外的阵列的,则可以使用下面的溶液(来自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

当运行$a = array($var1 ..,这些值将被写入到$a,和原来的符号表名,$var1被分开存放我相信。这意味着,不,现在没有办法获取原始变量名称。你必须做到这一点的时间提前,或做一些疯狂的魔法与get_defined_vars

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

'array_combine()'没有实现任何内容;'compact(array('var1','var2','var3')) '(或'compact('var1','var2','var3')')返回相同的结果 – cmbuckley 2012-01-09 15:39:40

+0

@cbuckley绝对正确,不知道我在想什么。 – 2012-01-09 15:44:20