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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: in_array. Искомое значение

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Tox
Отправлено: 02 Марта, 2012 - 19:18:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




Вопрос навеян этим маном (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] => // *

В чем проблема? До этого массив инициализировал так:


-----
In Console We Trust. Code hard. Or die.
 
 Top
Tox
Отправлено: 04 Марта, 2012 - 11:24:40
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




че, никто не знает что ли?


-----
In Console We Trust. Code hard. Or die.
 
 Top
vlom
Отправлено: 04 Марта, 2012 - 11:51:08
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010  
Откуда: Екатеринбург


Помог: 4 раз(а)




данная функция проверит есть ли в массиве значение
то есть
PHP:
скопировать код в буфер обмена
  1.  
  2. $test = array('Привет Коля', 'Привет Света', 'Привет Аня', 'Привет Вася', 'Привет там еще кто-то');
  3.  
  4. if(in_array('Привет', $test)){
  5.     echo "Я нашееееееееееееееееееел";
  6. } else {
  7.     echo 'Не фига не вижу';
  8. }
  9.  


Данный скрипт выведет НЕФИГА НЕ ВИЖУ так как эта функция ищет полное совпадение строки
Для реализации того, что тебе требуется следует поглядеть в сторону регулярок
если я правильно понял может быть строка '//' а может быть и '// тут далее какой-то твой бред'
 
 Top
Tox
Отправлено: 04 Марта, 2012 - 12:17:05
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




А по вежливее никак?
Учитесь читать, в массиве есть элемент "//" и даже такой элемент "//*", и тд. Не работает даже поиск элемента, 100% совпадающего с запросом.
Полное совпадение должно сработать, ибо читайте выше.
Про регулярки я и так знаю.


-----
In Console We Trust. Code hard. Or die.
 
 Top
OrmaJever Модератор
Отправлено: 04 Марта, 2012 - 13:23:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Tox Ну единственое что могу посоветовать это var_dump()
PHP:
скопировать код в буфер обмена
  1. echo $arr[0]; // именно в этой ячейке и находится "//", все выводится красиво
  2. var_dump($arr[0]);
  3. if (in_array("//", $arr)) {
  4.     echo "Нашел //"; // а вот тут почему-то пусто
  5. }

И если php не находит значит есть на то причины, пробелы, невидимые символы которые echo не выводит.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
ugin_root
Отправлено: 04 Марта, 2012 - 13:56:21
Post Id


Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011  
Откуда: Киргизия


Помог: 5 раз(а)




возможно проблема с кодировками!
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
 
 Top
Tox
Отправлено: 04 Марта, 2012 - 15:17:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




OrmaJever, спасибо, помогло

(Отредактировано автором: 04 Марта, 2012 - 15:17:45)



-----
In Console We Trust. Code hard. Or die.
 
 Top
OrmaJever Модератор
Отправлено: 04 Марта, 2012 - 15:40:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Обязательно к прочтению -> http://www.phpfaq[dot]ru/debug


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Ch_chov
Отправлено: 04 Марта, 2012 - 17:16:06
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Tox, каждый элемент массива полученный с помощью file содержит символ конца строки. Поэтому и не срабатывают условия. trim поможет решить проблему.


Отредактировано модератором: Мелкий, 04 Марта, 2012 - 17:23:20
функция, всё же, trim, а не rtim. Fixed =)
 
 Top
OrmaJever Модератор
Отправлено: 04 Марта, 2012 - 17:25:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Мелкий, а помоему он имел ввиду rtrim, а не trim Подмигивание


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Ch_chov
Отправлено: 04 Марта, 2012 - 17:51:29
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Да rtrim, хотя trim тоже подойдет.

Другой способ использовать специальный флаг в file
PHP:
скопировать код в буфер обмена
  1. $arr = file('filename.txt', FILE_IGNORE_NEW_LINES);
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB