通过CSV搜索,仅返回精确的拟合值

时间:2012-12-28 07:38:35

标签: php csv

我再次开始使用有效的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;
   }
}
?>   

1 个答案:

答案 0 :(得分: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;
   }
}