我被要求編寫一個PHP腳本,它從幾個下拉框中提取一些POST輸入,這些下拉框提供了一些可選擇的條件,並在最後吐出一個或多個包含唯一代碼的字符串變量。如何替換嵌套的開關語句
變量名稱的形式爲$ thingPlaceType,每一個都是唯一的。下拉框允許的選擇:
- 任何一個「東西」或所有「東西」一起
- 任何一個「地方」或所有的「地方」一起
- 任何一個「類型」或全部「種」起來
我無法弄清楚如何選擇這些代碼,而不訴諸嵌套switch語句,我做
switch($_POST['thing'])
{
case "thing1":
switch($_POST['place'])
{
case "place1":
switch($_POST['type'])
{
case "type1":
$output = $thing1Place1Type1;
case "type2":
$output = $thing1Place1Type2;
case "alltypes":
$output = $thing1Place1Type1.$thing1Place1Type2.$thing1PlaceType3;
}
case "place2":
...
case "allplaces":
...
}
case "thing2":
switch($_POST['place'])
{
case "place1":
switch($_POST['type'])
{
case "type1":
$output = $thing1Place1Type1;
...
...
...
}
似乎代碼正在變成箭頭反模式。我在想我可能會使用多維數組做一些事情,或者可能是一個單一的數組,我將這些值與鍵匹配。但我覺得這是抓着吸管,一定有我失蹤的東西。現在是時候把字符串變成具有屬性的適當對象嗎?
像'$ thing1Place1Type1'這些變量 - 這只是僞代碼,還是你真的需要評估一個變量名? –
任何時候當你有一堆名字非常相似的變量時,你很可能需要重新評估你的設計。例如。 '$ thing1place1','$ thing1place2'等等非常自然地映射到例如'$ things_places = array(1 => array(1 =>'some place',2 =>'another place'),2 => ...);'(或者你也可以使用明確的鍵名,例如'''位置'=>數組(1 => ...)')。轉向更明智的數據模型,你會發現這樣的問題更容易管理,如果不是不存在的話。 –