Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: in_array. Искомое значение
Форумы портала PHP.SU » » Вопросы новичков » in_array. Искомое значение

Страниц (1): [1]
 

1. Tox - 02 Марта, 2012 - 19:18:08 - перейти к сообщению
Вопрос навеян этим маном (http://ru.php.net/manual/ru/function.in-array.php)
Есть огромный массив - i>1000. Надо найти в нем все элементы, начинающиеся с "//".
Но есть и простая ячейка с "//", для ознакомления я начал тестить на ней.
PHP:
скопировать код в буфер обмена
  1. echo $arr[0]; // именно в этой ячейке и находится "//", все выводится красиво
  2. if (in_array("//", $arr)) {
  3.     echo "Нашел //"; // а вот тут почему-то пусто
  4. }

Взял пример с мана, и изменил его
PHP:
скопировать код в буфер обмена
  1. $os = array("//", "NT", "Irix", "Linux");
  2. if (in_array("//", $os)) {
  3.     echo "Нашел //";
  4. }

Тут все норм, "//" найден. Но почему функция не видет ячейку с "//" - вопрос.

Вывел:
CODE (htmlphp):
скопировать код в буфер обмена
  1. (
  2.     [0] => //
  3.  
  4.     [1] => // *

В чем проблема? До этого массив инициализировал так:
PHP:
скопировать код в буфер обмена
  1. $arr = file( ну и тд, по ftp)
2. Tox - 04 Марта, 2012 - 11:24:40 - перейти к сообщению
че, никто не знает что ли?
3. vlom - 04 Марта, 2012 - 11:51:08 - перейти к сообщению
данная функция проверит есть ли в массиве значение
то есть
PHP:
скопировать код в буфер обмена
  1.  
  2. $test = array('Привет Коля', 'Привет Света', 'Привет Аня', 'Привет Вася', 'Привет там еще кто-то');
  3.  
  4. if(in_array('Привет', $test)){
  5.     echo "Я нашееееееееееееееееееел";
  6. } else {
  7.     echo 'Не фига не вижу';
  8. }
  9.  


Данный скрипт выведет НЕФИГА НЕ ВИЖУ так как эта функция ищет полное совпадение строки
Для реализации того, что тебе требуется следует поглядеть в сторону регулярок
если я правильно понял может быть строка '//' а может быть и '// тут далее какой-то твой бред'
4. Tox - 04 Марта, 2012 - 12:17:05 - перейти к сообщению
А по вежливее никак?
Учитесь читать, в массиве есть элемент "//" и даже такой элемент "//*", и тд. Не работает даже поиск элемента, 100% совпадающего с запросом.
Полное совпадение должно сработать, ибо читайте выше.
Про регулярки я и так знаю.
5. OrmaJever - 04 Марта, 2012 - 13:23:17 - перейти к сообщению
Tox Ну единственое что могу посоветовать это var_dump()
PHP:
скопировать код в буфер обмена
  1. echo $arr[0]; // именно в этой ячейке и находится "//", все выводится красиво
  2. var_dump($arr[0]);
  3. if (in_array("//", $arr)) {
  4.     echo "Нашел //"; // а вот тут почему-то пусто
  5. }

И если php не находит значит есть на то причины, пробелы, невидимые символы которые echo не выводит.
6. ugin_root - 04 Марта, 2012 - 13:56:21 - перейти к сообщению
возможно проблема с кодировками!
PHP:
скопировать код в буфер обмена
  1. $a1 = array('//','//a','//а','//*');
  2. $a2 = array_map(function($v){return iconv('utf-8','utf-32',$v);},$a1);
  3. echo in_array('//',$a1)?1:0;//1
  4. echo in_array('//',$a2)?1:0;//0
  5. echo in_array(iconv('utf-8','utf-32','//'),$a2)?1:0;//1
7. Tox - 04 Марта, 2012 - 15:17:06 - перейти к сообщению
OrmaJever, спасибо, помогло
8. OrmaJever - 04 Марта, 2012 - 15:40:21 - перейти к сообщению
Обязательно к прочтению -> http://www.phpfaq[dot]ru/debug
9. Ch_chov - 04 Марта, 2012 - 17:16:06 - перейти к сообщению
Tox, каждый элемент массива полученный с помощью file содержит символ конца строки. Поэтому и не срабатывают условия. trim поможет решить проблему.
10. OrmaJever - 04 Марта, 2012 - 17:25:15 - перейти к сообщению
Мелкий, а помоему он имел ввиду rtrim, а не trim Подмигивание
11. Ch_chov - 04 Марта, 2012 - 17:51:29 - перейти к сообщению
Да rtrim, хотя trim тоже подойдет.

Другой способ использовать специальный флаг в file
PHP:
скопировать код в буфер обмена
  1. $arr = file('filename.txt', FILE_IGNORE_NEW_LINES);

 

Powered by ExBB FM 1.0 RC1