0

繰り返しますが、私は動作する CSV フィルターに取り組んでいます。約 500 行のプロモーション コードを検索し、その金額を ajax レシーバーに返します。奇妙なことに、正確に一致するものを検索するのではなく、2 文字だけを入力すると、入力した文字を含む値が見つかると、php プロセッサが結果を返します。4弦値の正確な適合のみを探すために必要です。

これまでの私のコードは次のとおりです。

<?php
// if data are received via POST, with index of 'test'
if (isset($_POST['test'])) {
    $promocodevalid = false;
    $file  = fopen('test.csv', 'r');
    $coupon = array($_POST['test']); 
    $coupondef = $_POST['test'];             // get data
    $coupon = array_map('preg_quote', $coupon);
    $regex = '/'.implode('|', $coupon).'/i';
    while (($line = fgetcsv($file)) !== FALSE) {  
       list($promocode, $amount) = $line;

       if(preg_match($regex, $promocode)) {
           $validity = 1;
           echo $amount."[BRK]".$promocode."[BRK]".$validity;
           $promocodevalid = true;
           break;
       }
    }
   if(!$promocodevalid) {
       $validity = 0;
       echo $amount."[BRK]".$promocode."[BRK]".$validity;
   }
}
?>   
4

1 に答える 1

0

必要のない正規表現は避けるようにしてください。str*必要な機能を検索します。上記のコードは次のようになります。

if (isset($_POST['test'])) {
    $promocodevalid = false;
    $file  = fopen('test.csv', 'r');
    $coupondef = $_POST['test'];             // get data

    while (($line = fgetcsv($file)) !== FALSE) {  
       list($promocode, $amount) = $line;  

       // remove strtolower if you are have lowercase promocode, 
       // but probably leave a $coupondef lowered.
       if(strpos(strtolower($promocode), strtolower($coupondef)) === 0) {
           $validity = 1;
           echo $amount."[BRK]".$promocode."[BRK]".$validity;
           $promocodevalid = true;
           break;
       }
    }
   if(!$promocodevalid) {
       $validity = 0;
       echo $amount."[BRK]".$promocode."[BRK]".$validity;
   }
}
于 2012-12-28T08:44:59.210 に答える