从CSV搜索中排除连字符

时间:2016-06-27 00:26:48

标签: php csv

对于比我更有经验的人来说,希望是一个简单的。

我使用以下内容来插入CSV文件,并根据搜索帐号显示该帐号的信息。这样做很好但是自动生成的CSV文件在帐号中包含连字符,但是我们的客户从来没有看到这个,也不会知道该号码中的连字符。

是否可以完成相同的搜索功能但排除任何特殊字符?

<?php $acctno = isset($_GET['acctno']) ? $_GET['acctno'] : null;

            $notices = null;
            if ($acctno) {
                if ($file = fopen(''.BASE_URL.'/data/ParcelNotices.csv', 'r')) {
                    while (($data = fgetcsv($file)) !== false) {
                        if ($data[0] === $acctno) {
                            $notices = $data[2];
                            break;
                        } 

                    }
                }
            }?>

我的CSv账号如下:00100659-05

如果他们搜索00100659-05它完美无缺,我需要他们能够输入0010065905并获得积极的结果。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以修改此部分:

if($data[0] === $acctno){
   $notices = $data[2];
   break;
}

对此:

if($data[0] === $acctno || Str_Replace('-','',$data[0])===$acctno)){
   $notices = $data[2];
   break;
}

我相信在搜索时会忽略连字符。但是,如果您有很多请求,那么删除所有破折号后创建CSV的第二个副本可能要好得多,以缩短搜索时间。

Edit1:要排除任何非字母数字字符,您可以使用Preg_Replace,如下所示:

if($data[0] === $acctno || Preg_Replace('@[^a-zA-Z0-9]@','',$data[0])===$acctno)){
   $notices = $data[2];
   break;
}

Edit2:清理:

<?php

//
$acctno_requested = isset($_GET['acctno']) ? $_GET['acctno'] : null;

//
$notices = null;
if ($acctno_requested) {
    if ($file = fopen(''.BASE_URL.'/data/ParcelNotices.csv', 'r')) {
        while (($data = fgetcsv($file)) !== false) {

            //
            $accountno_file=$data[0];
            $accountno_file_clean=Preg_Replace('@[^a-zA-Z0-9]@','',$accountno_file);

            //
            if ($accountno_file_clean === $acctno_requested) {
                $notices = $data[2];
                break;
            } 

        }
    }
}

?>