Rumych
16.01.2013 - 16:48
Здравствуйте.
Есть такой вопрос.
Вот код:
if($_GET['b']){
$str = $_GET['b'];
$arr = file("test.txt");
if(in_array($str, $arr, true)) echo '{"a":"Есть такое слово!!!"}';
else echo '{"a":"Нет такого варианта, извините"}';
exit();
}
Суть в следующем: со страницы через AJAX в скрипт передается некоторое слово, например "site", скрипт принимает это слово, затем открывает текстовый файл который содержит перечень слов, в моем случае 'site' и 'Time', и считывает его в массив, а затем ищет вхождение полученного слова в массив.
Проблема в том, что передаю например 'site', в файле есть такое слово, в полученном массиве тоже но результат in_array() - false.
Подскажите пожалуйста где моя ошибка.
Спасибо.
killer8080
16.01.2013 - 17:09
$arr = file("test.txt", FILE_IGNORE_NEW_LINES);
Rumych
16.01.2013 - 17:28
$arr = file("test.txt", FILE_IGNORE_NEW_LINES);
- не помогает.
killer8080
16.01.2013 - 17:32
Цитата (Rumych @ 16.01.2013 - 15:28) |
- не помогает. |
var_dump массива сделай
Игорь_Vasinsky
16.01.2013 - 17:38
killer8080
буквально на днях - была такая же проблема
сравнивал даже длину слов из файла и простого массива. мистика - они разные, уж не знаю что там происходит, но на скорую руку сделал слова с разделителем || вместо PHP_EOL
так и не нашёл решение.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080Как ни странно, это далеко не всегда работает. Помогает только принудительная обрезка конечных символов перевода строк.
$arr = array_map('rtrim', file("test.txt"));
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Игорь_Vasinsky
16.01.2013 - 17:47
вот где собака порылась.
а то я strtr с PHP_EOL - и болт...
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Rumych
16.01.2013 - 18:01
[php]var_dump($arr)[/php ] - array(2) { [0]=> string(6) "Time " [1]=> string(4) "site" }
Rumych
16.01.2013 - 18:22
Вы знаете, пошел передохнул, перекурил, пришел а оно заработало

?!
Наверное тему можно закрывать, я думаю.
Всем спасибо.
killer8080
16.01.2013 - 19:55
Цитата (twin @ 16.01.2013 - 15:41) |
killer8080Как ни странно, это далеко не всегда работает. |
возможно дело в различии EOL символа в разных ОС? Если файл создан в винде, а открывается на *nix, или наоборот.
Игорь_Vasinsky
16.01.2013 - 20:06
Цитата |
возможно дело в различии EOL символа в разных ОС? |
так PHP_EOL и создана как универсальная константа
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
16.01.2013 - 20:15
Цитата (Игорь_Vasinsky @ 16.01.2013 - 18:06) |
так PHP_EOL и создана как универсальная константа |
И что? Файл то может быть создан не на сервере. Плюс, возможно в конце строки присутствовали другие пробельные символы, которые file естественно подчищать не будет. В такой ситуации - да, только тримить вручную.
Цитата (killer8080 @ 16.01.2013 - 15:55) |
Цитата (twin @ 16.01.2013 - 15:41) | killer8080Как ни странно, это далеко не всегда работает. |
возможно дело в различии EOL символа в разных ОС? Если файл создан в винде, а открывается на *nix, или наоборот.
|
Да это понятно. Не понятно, почему функция с параметром FILE_IGNORE_NEW_LINES реагирует только на \n. Недоделка в PHP, а люди страдают)))
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
killer8080
16.01.2013 - 20:33
Цитата (twin @ 16.01.2013 - 18:18) |
Не понятно, почему функция с параметром FILE_IGNORE_NEW_LINES реагирует только на \n. |
Хм.. а действительно, причем даже на винде. А если файл в mac формате, то file его вообще не разобьет в массив, возвращает весь текст в одном элементе массива.
Игорь_Vasinsky
16.01.2013 - 20:35
так получается эта константа при записи только правильный формат выбирает в зависимости от оси, но не фига не различает при чтении?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.