下面的代码主要是用 PHP 编写的,但我希望能加快进程,而且 PHP 中解析字符串很慢。
假设以下我从数据库中获取一个字符串,并将其转换为一个数组。
$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” 结果:17
当前方法按预期工作。但是,使用 PHP 处理这些内容很慢。我曾考虑过使用 JSON,但这意味着我将向用户提供我的整个价格表,这并不是我真正想要的。我也考虑过使用另一种语言(例如python),但考虑到成本,这并不特别实用。这给我留下了 MySQL。
如果有人可以建议一种便宜且具有成本效益的方法来做到这一点,请提供示例。如果您可以为此提供一个更快的 PHP 解决方案,那就更好了。
谢谢!