преобразование имени переменной в строку - PullRequest
1 голос
/ 09 января 2012

представьте, что у меня есть 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 ]

4 голосов
/ 09 января 2012

Если вы хотите узнать, можете ли вы вспомнить имена переменных из созданного вами массива, извините, но вам это не удастся (по крайней мере, так, как в вашем примере)).Когда вы создаете этот массив, вы создаете копию этих переменных и сохраняете их в массиве.Вы на самом деле не указываете на исходные переменные.

Пара опций в верхней части моей головы.

Опция 1: Создайте массив с именами переменных в качестве ключей.

Вариант 2: заранее назначьте имя переменной самой переменной.Пример: $var1->VAR_NAME = 'var1';

Вариант 3: Попробуйте обходной путь, подобный предложенному здесь: Как получить имя переменной в виде строки в PHP?

Вариант 4:Если вам просто нужно, чтобы он ссылался на исходную переменную, попробуйте захватить ссылку на сам объект, используя &.

Надеюсь, это поможет.

3 голосов
/ 09 января 2012

Когда вы запускаете $a = array($var1 .., эти значения записываются в $a, и, как я полагаю, исходное имя таблицы символов, $var1, сохраняется отдельно.Это означает, что нет, в настоящее время нет способа получить исходное имя переменной.Вы должны сделать это заранее или сделать какую-нибудь сумасшедшую чёрную магию с get_defined_vars:

$var1 = 'a';
...
$varnames = array('var1', 'var2', 'var3');
$a = compact($varnames);
//$a now has array('var1' => 'a' ...
1 голос
/ 09 января 2012

Если вы можете хранить свои переменные следующим образом:

   $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; 
     }
?>
0 голосов
/ 09 января 2012
$a = array($var1, $var2, $var3);
foreach($a as $key => $value) {
    echo($key . ' => ' . $value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...