2015-10-22 4 views
1

Я пытаюсь создать функцию, которая добавляет данные в массив сеансов PHP. Я хочу динамически создать ключ элемента массива в качестве имени переменной и установить значение указанного ключа для этого значения переменных. Мой пример кода до сих пор:Получить переданное имя переменной как строку

$foo = 'bar'; 
addHookpointVar($foo); 

function addHookpointVar($var) { 
    $_SESSION['HOOKPOINT']['foo'] = $var; 
} 

Есть ли способ в PHP, чтобы получить строковое представление переменной, так что мой $ _SESSION [ «HOOKPOINT»] [ «VAR»] будет установлено на имя переменная прошла?

Все методы, которые я нашел включать пробегаем по каждой переменной в $ _GLOBALS

+0

вы просто должны передать имя как 2-й аргумент. –

+0

@AziBaloch Да, я знал, что это вариант, но спасибо, что указали это. Этот вопрос заключался в том, чтобы конкретно увидеть, есть ли методы использования имени переменных в виде строки. Я пытаюсь написать функцию, чтобы делать много общих манипуляций, где мне не требуется жестко программировать каждое имя переменной в вызове функции. –

+0

@ArbraCadaver отправлен точно так, как вы хотите. –

ответ

4

Вот один из способов:

$foo = 'bar'; 
addHookpointVar(compact('foo')); 

function addHookpointVar($var) { 
    list($key, $val) = each($var); 
    $_SESSION['HOOKPOINT'][$key] = $val; 
} 

Или, может быть, очиститель для функции:

function addHookpointVar($var) { 
    $_SESSION['HOOKPOINT'] = array_merge($_SESSION['HOOKPOINT'], $var); 
} 

Однако, Я бы, вероятно, просто использовал массив $hp['foo'] = 'bar';, а затем вы можете передать $hp в функцию.

+0

Это очень приятное/чистое решение. Я надеялся сохранить его достаточно общим, чтобы я мог использовать имя переменной в виде строки (так что я могу динамически вызывать функцию на циклах и т. Д.), Но это решение по-прежнему очень полезно. По внешнему виду имя переменной как строки, вероятно, невозможно. Я собираюсь оставить вопрос открытым на некоторое время, но я соглашусь на этот ответ, если ничего не происходит по этим другим строкам :) +1 –

+0

Я думал, что он все же захватил имя var как строку? :/ 'compact ('foo')' создал ассоциативный массив, где он тогда представлен в переменной $ var в переменной $, а ключ $ будет именем var (foo в этом случае), не так ли? – Jujunol

+0

Вид. По-прежнему требуется помещать строковое представление, а не напрямую передавать в него переменную (как я уже упоминал, было бы полезно, когда внутри петель и т. Д.), Что в основном было тем, чего я надеялся выполнить. Кажется, что это самое близкое к решению, которое может быть выполнено, хотя я принимаю ответ –

-1

Я также искал решение для преобразования имени переменной в виде строки. Не нашли правильный ответ, я создал функцию для этой проблемы.

<?php 
function func(&$variable) { 
    $backupValue = $variable; 
    $variable = uniqid(); 
    foreach ($GLOBALS as $key => $value) { 
     if (!is_array($key) && $value == $variable) { 
      $variable = $backupValue; 
      return $key; 
     } 
    } 
    throw new Exception('error number xx'); 
} 

$test1 = "This is a test"; 
$test2 = 'This is a second test'; 
$test3 = 'This is a second test'; 

$array = []; 

$array[func($test1)] = $test1; 
$array[func($test2)] = $test2; 
$array[func($test3)] = $test3; 

var_dump($array); 
?> 

(Также доступно on Github.)

+0

Пока ссылка может ответить на вопрос, ссылки меняются, поэтому Stack Overflow предпочитает не зависеть от них. [Было бы лучше] (// meta.stackoverflow.com/q/8259) включить основные части ответа здесь и предоставить ссылку для справки. –

+0

Я не знал, извините! Под редакцией! – Nico2am

Смежные вопросы