2011-09-01 208 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

相關問題