2

以下のコードは主に 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;

期待される結果の例:

選択したオプション: "red","5"
結果: 3

選択されたオプション: "3"、"赤" 結果: 1

選択したオプション: "red"、"3"、"12v" 結果: 17


現在の方法は期待どおりに機能します。ただし、PHP を使用してこれらを処理するには時間がかかります。JSON を使用することを考えましたが、それはユーザーに価格表全体を提供することになり、実際に探しているものではありません。別の言語 (Python など) を使用することも考えましたが、コストを考えると特に実用的ではありません。残りはMySQLです。

誰かがこれを行うための安価で費用対効果の高い方法を提案できる場合は、提供して例を挙げてください. これに対して、高速に動作するさらに優れた PHP ソリューションを提供できればなおさらです。

ありがとうございました!

4

1 に答える 1