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 回答