如何最好地从查找表中获取数据

时间:2014-10-02 21:13:44

标签: algorithm cardinality

我有一些产品系列,其产品具有各种功能。我有一份为每种产品制作的图纸清单,下面是图纸中表示产品线,产品和功能的样本。

enter image description here

我想弄清楚,当给定具有所有功能的特定产品(即表中的一行)时,围绕功能构建代码的最有效最简洁的方法是什么,选择正确的绘制?

我总是可以做像

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

并最终得到尽可能多的flat if语句,因为表中有行。但必须有更好的方法。我认为它可能与基数有关,或者可能与产品的每个属性中的选项的可变性有关。出于某种原因,确切的概念逃脱了我。

我有一种感觉,例如,最好首先检查产品是否有电机,只是因为一旦你知道它将消除所有选项中的大约一半并缩短它的速度。即在主外部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行,可以直接将它们编码成代码。这将是只读的,而不是经常更新,所以我想使用多维数组来编码这些数据。

2 个答案:

答案 0 :(得分:1)

这就是为数据库制作的。您将能够使用简单的SELECT语句来准确找到所需内容。即使现在它只有一张行数很少的桌子,这就是我的方式。

如果您确实希望在脚本中存储所有内容,则可以继续散列每个产品的属性并使用散列值作为查找表的键。当给定某些产品属性时,您可以将它们哈希并检索相应的图形。

答案 1 :(得分:0)

您可以将数据编码为图形文件名。完全按照第一个if语句的方式。例如:

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

这将把所有麻烦都留在外面,并简单地使用代码。