2016-06-27 4 views
0

надеюсь, простой для кого-то более опытного, чем я.Исключить дефис из поиска 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 и получить положительный результат.

Любая помощь была бы принята с благодарностью.

ответ

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; 
      } 

     } 
    } 
} 

?> 
+0

Большое вам спасибо omghai_8782, ваш ответ работал отлично. – mobius2000

+0

приятно слышать :) –