下面的代碼主要是使用PHP編寫的,但我希望能夠加快這個過程,並且在PHP中解析字符串的速度很慢。使用MySQL改進算法使用MySQL改進算法
假設我從數據庫中獲取一個字符串,並將其轉換爲數組。
$data['options_list'] = array(
"Colours" => array('red','blue','green','purple'),
"Length" => array('3','4','5','6'),
"Voltage" => array('6v','12v','15v'),
);
這些子陣列將分別作爲下拉選擇列表,最終用戶可以從每個選擇列表中精確選擇1個。
當用戶點擊提交時,我想要將提交的值與管理員預先定義的「價格表」進行匹配。潛在的「紅色」和「6v」將花費5美元,但「紅色」和「5」(長度)和「6v」花費6美元。
問題是,該怎麼做?
目前,我採取的方法是這樣的:
在提交表單(的3名選擇列表)中,我得到從數據庫管理員設置相關的價格規定。我做了一個結果的例子。
$data['price_table'] =
array(
'red;4'=>'2',
'red;5'=>'3',
'red;6'=>'4',
'blue;3'=>'5',
'blue;4'=>'6',
'blue;5'=>'7',
'blue;6'=>'8',
'green;3'=>'9',
'green;4'=>'10',
'green;5'=>'11',
'green;6'=>'12',
'purple;3'=>'13',
'purple;4'=>'14',
'purple;5'=>'15',
'purple;6'=>'16',
'red;3'=>'1',
'red;3;12v'=>'17',
'blue;6;15v'=>'18',
);
注:上面的例子的順序可以是任何順序的,並且該算法應該工作。
然後,我將每個上述元素分解到一個數組中,並獲得匹配最佳分數的結果。
$option_choices = $this->input->post('select');
$score = 0;
foreach($data['price_table'] as $key=>$value)
{
$temp = 0;
$keys = explode(';',$key);
foreach($keys as $k)
{
if(in_array($k, $option_choices))
{
$temp++;
}else{
$temp--;
}
}
if($temp > $score)
{
$score = $temp;
$result = $value;
}
}
echo "Result : ".$result;
預期結果的
例子:
選選項 「紅」, 「5」
結果:3
選擇的選項: 「3」, 「紅」 結果:1
選定的選項:「red」,「3」,「12v」 R esult:17
當前方法按預期工作。但是,使用PHP處理這些緩慢。我想過使用JSON,但這意味着我會給用戶提供我的整個價格表,而這並不是我正在尋找的。我也想過使用另一種語言(例如python),但考慮到成本,它並不特別實用。這給我留下了MySQL。
如果有人可以建議以便宜和具有成本效益的方式來做到這一點,請提供例子。更好的是,如果你能提供一個更好的PHP解決方案,這個工作很快。
謝謝!
優化陣列邏輯是硬,讓我們去購物,這個背景嗎?這是magento還是什麼? (另外,'explode()'並給每個部分一個數字值的含義) – Amelia 2013-05-02 03:33:14
對不起。我爲此使用CodeIgniter – 2013-05-02 03:34:30
我認爲您使用的匹配算法在任何語言中效率都不高。它看起來並不像索引,它必須爲每一行計算一個分數。 – Barmar 2013-05-02 03:56:14