2011-01-03 2 views
3

Как я могу динамически создавать имена переменных на основе массива? Я хочу сказать, что я хочу пропустить этот массив с помощью foreach и создать новую переменную $elem1, $other и т. Д. Возможно ли это?создание имен переменных из списка массивов

$myarray = array('elem1', 'other', 'elemother', 'lastelement'); 
foreach ($myarray as $arr){ 
    //create a new variable called $elem1 (or $other or $elemother, etc.) 
    //and assign it some default value 1 
} 
+0

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

+0

Это не список массивов в PHP - это просто * массив *. –

ответ

3
foreach ($myarray as $name) { 
    $$name = 1; 
} 

Это создаст переменные, но они видны только внутри цикла foreach. Спасибо Ян Ханчич за это.

+0

Это создаст локальные переменные, непригодные для использования вне цикла foreach, не так ли? –

+0

@Jan Хороший аргумент. +1 для вашего ответа. Я обновил свой ответ. –

+3

@Jan Hančič: Нет, это работает: http://codepad.org/Z8tiPF87 –

2

Что-то вроде этого следует сделать трюк

$myVars = Array(); 
$myarray = array('elem1', 'other', 'elemother', 'lastelement'); 
foreach ($myarray as $arr){ 
    $myVars[$arr] = 1; 
} 

Extract ($myVars); 

Что мы делаем здесь, это создать новый массив с теми же названиями клавиш и значение 1, то мы используем extract() функцию, что «новообращенные» массив элементы в «обычные» переменные (ключ становится именем переменной, значение становится значением).

3

метод goreSplatter работает, и вы должны использовать, что, если вам действительно нужно, но вот альтернатива только для пинков:

extract(array_flip($myarray)); 

Это создаст переменные, которые первоначально будут хранить целое значение, соответствующее ключу в исходном массиве. Из-за этого вы можете сделать что-то нелепое вот так:

echo $myarray[$other]; // outputs 'other' 
echo $myarray[$lastelement]; // outputs 'lastelement' 

Дико полезным.

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