从数组列表创建变量名

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
}

你为什么想要动态创建这些变量?你最终想要实现什么目标?虽然这是可能的,但在大多数情况下并不必要,而且会使你的代码更加复杂。 - Felix Kling
这不是 PHP 中的数组列表 - 它只是一个 数组 - Jacob Relkin
4个回答

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

这将创建变量,但它们只在foreach循环内可见。感谢Jan Hančič指出。


这将创建变量,但是它们只能在foreach循环内部被看到。感谢Jan Hančič指出这一点。

这将创建本地变量,无法在foreach循环之外使用,是吗? - Jan Hančič
@Jan 很好的观点。+1 给你的回答。我更新了我的回答。 - Linus Kleen
3
foreach 不会创建局部作用域。 - Tatu Ulmanen
我真是太傻了,一直以为它会 :) 看起来它在本地作用域中创建它们是很合理的。 - Jan Hančič

3
的方法是有效的,如果你真的需要它,那就使用它。但这里有一个仅供尝试的替代方法:
extract(array_flip($myarray));

这将创建变量,最初会存储一个整数值,对应于原始数组中的键。因此,您可以像这样做一些奇怪的事情:

echo $myarray[$other]; // outputs 'other'
echo $myarray[$lastelement]; // outputs 'lastelement'
非常有用。

2

像这样的东西应该能够解决问题

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

Extract ( $myVars );

我们在这里所做的是创建一个新数组,具有相同的键名和值为1,然后我们使用extract()函数将数组元素“转换”为“常规”变量(键成为变量的名称,值成为值)。

0

使用array_keys($array)

例如:

$myVars = Array ();
$myarray = array('elem1', 'other', 'elemother', 'lastelement');

$namesOfKeys = array_keys($myVars );
foreach ($namesOfKeys as $singleKeyName) {
  $myarray[$singleKeyName] = 1;
}

http://www.php.net/manual/en/function.array-keys.php


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接