Переройте 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;
   }
}
?>   
0
nl ja de
Это походит на большое количество кода, чтобы найти точное совпадение в файле CSV. Я предполагаю, что ваши почтовые данные содержат последовательность, которая должна быть 4 случайными работами долго? и у вашего csv есть линии как abcd, efgh, ijkl ?
добавлено автор Hugo Delsing, источник
измените вас regex, чтобы $regex = ' / ^ (' .implode (' | ' $coupon).'), / i';
добавлено автор Artem L, источник
измените вас regex, чтобы $regex = ' / ^ (' .implode (' | ' $coupon).'), / i';
добавлено автор Artem L, источник
о.. я вижу, где ошибка.. почему вы используете regex? можно просто поместить если (ремни для правки бритв (strtolower ($promocode), strtolower ($coupondef)) === 0) { вместо если (preg_match ($regex, $promocode)) {. Также можно удалить strtolower , если код находится в ниже, и вы получаете $ _POST [' test'] в ниже также.
добавлено автор Artem L, источник
о.. я вижу, где ошибка.. почему вы используете regex? можно просто поместить если (ремни для правки бритв (strtolower ($promocode), strtolower ($coupondef)) === 0) { вместо если (preg_match ($regex, $promocode)) {. Также можно удалить strtolower , если код находится в ниже, и вы получаете $ _POST [' test'] в ниже также.
добавлено автор Artem L, источник
Просто написал ответ:)
добавлено автор Artem L, источник
Просто написал ответ:)
добавлено автор Artem L, источник
ПРЕКРАСНЫЙ @ArtemL! Теперь это работает отлично. Большое спасибо за помощь!: D
добавлено автор Ansehelm, источник
ПРЕКРАСНЫЙ @ArtemL! Теперь это работает отлично. Большое спасибо за помощь!: D
добавлено автор Ansehelm, источник
@ArtemL это won' t работа. Даже я ввожу правильный код, он возвратил бы $validity как 0.
добавлено автор Ansehelm, источник
@ArtemL это won' t работа. Даже я ввожу правильный код, он возвратил бы $validity как 0.
добавлено автор Ansehelm, источник
There' s 500 рядов в моем csv, в то время как каждый содержит 2 колонки. Первые колонки - промо-код, который является 4 случайными работами долго каждый ("kbhb", "rwew", "dsaw"... и так далее). Второй была бы ценность кода.
добавлено автор Ansehelm, источник
There' s 500 рядов в моем csv, в то время как каждый содержит 2 колонки. Первые колонки - промо-код, который является 4 случайными работами долго каждый ("kbhb", "rwew", "dsaw"... и так далее). Второй была бы ценность кода.
добавлено автор Ansehelm, источник

2 ответы

Старайтесь избегать regexes, где они не необходимы. Поиск 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;
   }
}
0
добавлено
см. отредактированный ответ.
добавлено автор Artem L, источник
Да, но здесь я удалил обработку CSV. И это - ответ, в то время как это было комментарием и it' s не видимый, не проверяя what' s в разделе комментариев.
добавлено автор Artem L, источник
это все еще won' t работа.
добавлено автор Ansehelm, источник
Я нашел что ваш текущий ответ won' t работа. Предыдущая работа, превосходная с csv обработка неповрежденного. Теперь, даже если бы я ввел правильный код, то он возвратил бы $validity как 0.
добавлено автор Ansehelm, источник
На самом деле ответ вы обеспечили ранее работы отлично: если (strtolower ($promocode) == $coupondef) {
добавлено автор Ansehelm, источник

Старайтесь избегать regexes, где они не необходимы. Поиск 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;
   }
}
0
добавлено
см. отредактированный ответ.
добавлено автор Artem L, источник
Да, но здесь я удалил обработку CSV. И это - ответ, в то время как это было комментарием и it' s не видимый, не проверяя what' s в разделе комментариев.
добавлено автор Artem L, источник
это все еще won' t работа.
добавлено автор Ansehelm, источник
Я нашел что ваш текущий ответ won' t работа. Предыдущая работа, превосходная с csv обработка неповрежденного. Теперь, даже если бы я ввел правильный код, то он возвратил бы $validity как 0.
добавлено автор Ansehelm, источник
На самом деле ответ вы обеспечили ранее работы отлично: если (strtolower ($promocode) == $coupondef) {
добавлено автор Ansehelm, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp