2014-10-02 67 views
0

我有一些產品線具有各種功能。我有一份爲每件產品製作的圖紙清單,下面是產品線,產品和功能在圖紙中所代表的示例。如何最好地從查找表中獲取數據

enter image description here

我想弄清楚,當給定一個具體的產品,其所有功能(即從表中的一行),什麼是最有效的最簡潔的方式來構建圍繞我的代碼功能,選擇正確的圖紙?

我總是可以這樣做

if ($product == "A" 
    && $motor == true 
    && $feet == 3 
    && $outlet == true 
    && $manual == false) 
    getDrawing("A_motor_3_outlet_no_manual.jpg"); 

和if語句結束與儘可能多的平板,因爲有表中的行。但是一定有更好的辦法。我認爲這可能與基數有關,或者可能與產品每個屬性的選項的可變性有關。確切的概念由於某種原因而逃脫了我。

我有一種感覺,例如,最好先檢查產品是否有電動機,只是因爲一旦知道它將消除所有選項的一半並將其縮小得更快。即在主外,如果塊做這樣的事情:

if ($motor == true) 
{ 
    //7 drawings left to check 
} 
else 
{ 
    //6 drawings left to consider 
} 

,而不是像這樣:

if ($feet == 1) 
{ 
    //still 10 rows left to consider 
} 
else if ($feet == 2) 
{ 
    //just 2 options left to check 
} 
else if ($feet == 3) 
{ 
    //one option only left: 
    getDrawing("B_motor_3_no_outlet_manual.jpg"); 
} 

但是,也許我只是得太多這一點,只需要一個查找表以某種方式與所有的屬性,可能就像

getDrawing($lookup[$product][$motor][$feet][$outlet][$manual]); 

問題仍然存在於哪些順序的屬性最好用於查找表,如果它很重要。

問:

是否有一個「最佳」的if-then-else塊嵌套爲了決定產品性能,以減少決策的總數的代碼必須全面做,或者我需要放棄這種思路,只用查找表?爲什麼或者爲什麼不?

編輯:順便說一下..這看起來像一個很好的候選人使用數據庫..但我只有48行總數,並可以將它們直接編碼到代碼中。這將是隻讀的,不會經常更新,所以我正在考慮使用多維數組來編碼這些數據。

回答

1

這是數據庫的製作目的。您將能夠使用簡單的SELECT聲明來準確找到您需要的內容。即使現在它只有一個行數很少的桌子,這就是我想要的方式。

如果您確實想要將所有內容都存儲在腳本中,則可以繼續並散列每個產品的屬性,並使用散列值作爲查找表的關鍵字。當給定某些產品屬性時,您可以將它們散列並檢索相應的繪圖。

+0

哦,很酷,我喜歡哈希的想法,比我所知道的更加簡潔,我不知道是否應該使用表格,這使得我的選擇成爲了我的想法。 – Dennis 2014-10-02 21:27:42

+0

我結束了使用數據庫 – Dennis 2014-10-10 18:22:28

0

您可以將數據編碼爲圖形文件名。完全如您對第一個if聲明所做的那樣。例如:

$filename = $product."_".$feet."_".($outlet ? "true":"false")."_".($manual ? "manual":"no_manual")."jpg"; 
if (!file_exists($filename)) $filename = "missing.jpg"; 

這樣可以防止所有的煩惱,並且簡化代碼。

相關問題