2011-09-01 173 views
2

我遇到了这个问题。我有一堆数组决定运行哪一个我想用双'$'。

因此,如果$foo'bar',我得到了阵列$bar$$foo

这很好,但我如何获得$ bar的第一个元素? $ bar [0]就是这样,但$$foo[0]根本不给任何输出。

任何人都可以帮助我吗?

(我知道这是一个非常糟糕的风格,但代码已经被别人做,我必须在这里和那里扩展它。我不会重写全部代码结构;-)

+1

$$ foo的[0]'应该给你的输出,即使它只是一个**注意**约'B'是未定义的变量消息。这将暗示发生了什么问题。 – salathe

+0

@salathe默认情况下不会有输出。您必须明确地配置PHP以在读取未设置的变量时通知您。 – meagar

+0

@meagar取决于你的意思是“默认”。除此之外,任何遇到代码问题的人在这里都会提出问题,至少应该报告并显示所有错误。 – salathe

回答

7

使用内$foo周围括号:

echo ${$foo}[0]; 

你可以做同样的,当在一个可变的变量扩展辅助可变更为复杂:

$array1 = array('a'); 
$array2 = array('b'); 
$array3 = array('c'); 

// writes 'abc' 
for ($i = 1; $i <= 3; ++$i) 
    echo ${'array' . $i}[0]; 
0
$var = $$foo; 
echo $var[0]; // do whatever you want with that 
3

请不要这样做。 Variable-variables总是一个坏主意。有更好的方法来解决这个问题(比如数组)。使用变量变量会让你的代码变得更加难以理解。更不用说它可能具有的潜在安全影响。从长远来看,它是更好的...

请注意,我只谈论变量变量,而不是变量对象成员和方法($foo->$bar$foo->$method())...我一直都在使用它们(尽管即使这有一些缺点)。

+0

我知道这是一种非常糟糕的风格,但代码已经由其他人完成,我必须将它延伸到这里和那里。我不会重写所有的代码结构;-) – tamasgal

+0

@septi:没有理由不重写代码。请记住,不要重写它,你正在积累[技术债务](http://en.wikipedia.org/wiki/Technical_debt)。处理它的专业和最好的方法是当你发现这样的混乱时清理代码。否则,从长远来看,你会花费自己的重大问题。请记住,可维护性是至关重要的,所以最好稍加努力来解决问题,而不是稍后在成本上升时留下。它永远不会比现在更容易纠正(但会变得更加困难)... – ircmaxell

+0

IMO,变量并不总是一个坏主意。有时如果明智地使用,它可以减少代码量。 – galymzhan

2

我就麻烦了

确实是你。

我有一大堆阵列

那是你的问题。
数组应该是1。嵌套的一个。
所以,你只需要

$data[$foo][0] 
+0

你说得对,但正如我所说的,我只是从其他人的代码扩展,绝对不会重写整个东西。 – tamasgal

+0

+1用于关注您的关于文本;) – NikiC

相关问题