2013-05-22 84 views
2

我看了其他問題/答案,但我不完全理解它。此外,我還沒有找到一個問我確切的問題。如何在PHP中使用數組名稱中的變量? (變量數組/變量變量?)

我有7個數組存儲企業的開始和結束時間。我的PHP程序檢查當天的日期,並將其與當天的開始結束時間相匹配。所以,現在我有類似這樣的7點if聲明:

if (date(l) == 'Sunday') { 
    $start = $SundayAccountingHours['start']; 
    $end = $SundayAccountingHours['end']; 
} 

我想要做的是清理代碼。所以也許我可以有類似的東西

$start = ${$today}.AccountingHours['start']; 
$end = ${$today}.AccountingHours['end']; 

我該怎麼做這項工作?使用上面的例子,我得到這個:解析錯誤:語法錯誤,意想不到的'['在C:\ xampp \ htdocs \ Dev.php在線22其中行22是$ start被定義。我無法取出括號中的內容,因爲這是我需要真正瞭解的信息。

如果你不能說,我仍然是PHP的新手,所以任何幫助將不勝感激。

謝謝!

+1

php中的'.'不是一個屬性操作符,而是一個連接操作符。 – Orangepill

回答

5
if (date(l) == 'Sunday') { 
    $start = $SundayAccountingHours['start']; 
    $end = $SundayAccountingHours['end']; 
} 

首先,請在'l'附近加上引號。它正在尋找一個名爲l的常量,並且未能發現它將它當作字符串處理。這是非常糟糕的做法(應該發出警告)。其次,使用多維數組。您不需要嘗試將星期幾用作變量名稱的一部分。例如,

$start = $AccountingHours[$today]['start']; 

您可能會發現可變的變量在路上,讓你做一些像你想什麼,但我強烈建議你避開他們。我不認爲他們有一個實際的應用程序,他們只會造成混淆和錯誤(cough)。

0

數組元素可以通過變量,像這樣被引用:

$myArray[$myVar] 

陣列還可以包含其他的陣列,像這樣:

$myArray = array(); 
$myArray['a'] = array(); 
$myArray['a']['b'] = 'foo'; 
print $myArray['a']['b']; // prints 'foo' 

所以結合這兩個概念,你可以創建一個多二維數組參考變量:

$accountingHours = array(); 
$accountingHours['Sunday'] = array('start' => ..., 'end' => ...); 
// ... 
$start = $accountingHours[$today]['start']; 
1

如果您必須使用變量變量名稱(你應該真的去多維數組),嘗試這樣的事情。

$start = ${$today.'AccountingHours'}['start']; 
+0

這是解決明顯問題的情況,而不是實際問題。 – siride

+0

完全同意。這就是我寫第一行的原因。 :) – Achrome

+0

然後我會嘗試圍繞多維數組包裹我的頭。當我用你的代碼回顯$ start時,什麼都沒有顯示出來。這就像變量是空的... –