Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск значения в массиве без учета регистра символов
 
 автор: xpom   (19.02.2012 в 16:16)   письмо автору
 
 

какой функцией можно искать значения в массиве без учета регистра символов?
хотел in_array() искать, оказывается учитывает регистр символов...

  Ответить  
 
 автор: Роккер Руслан   (19.02.2012 в 21:55)   письмо автору
 
   для: xpom   (19.02.2012 в 16:16)
 

только написать свою... вот что у меня получилось
function inr_array($haystack, $needle){
            foreach($haystack as &$value){
                $value = mb_strtolower($value, 'UTF-8');
            }
            $needle = mb_strtolower($needle, 'UTF-8');
            return in_array($needle, $haystack);
    }


Ну и пример, с комментариями:
$array = array('прИвеТ','тест);                                            //у нас есть массив где лежит строка 'прИвеТ'
    
    function inr_array($haystack, $needle){                     // В фун.. передаём 2 знач. Массив и строку
            foreach($haystack as &$value){
                $value = mb_strtolower($value, 'UTF-8');
            }
            $needle = mb_strtolower($needle, 'UTF-8');
            return in_array($needle, $haystack);                На выходе она возвращет тру если совпадение нашлось, и наоборот
    }
    
    echo inr_array($array, 'привет');  // Пробуем найти 'привет'  в массиве $array   
всё получается(хотя в массиве лежит "прИвеТ")) Пользуйся) ПС Не претендую на гениальный алгоритм, может есть и лучше) Сварганил за 5 минут) Кто знает лучше - поделитесь)

  Ответить  
 
 автор: Sfinks   (20.02.2012 в 00:19)   письмо автору
 
   для: Роккер Руслан   (19.02.2012 в 21:55)
 

<?php

  
function array_isearch$needle $haystack ){
    
array_walk$haystack create_function'&$a,$b' '$a = mb_strtolower( $a , "utf-8" );' ) );
    return 
array_searchmb_strtolower$needle "utf-8" ) , $haystack );
  }

  
$arr = array("Сентябрь","Октябрь","Ноябрь");
  
$search array_isearch"СеНтЯбРь" $arr );
  
var_export$search );
  
$search array_isearch"Апрель" $arr );
  
var_export$search );

?>
Возвращает ключ для $needle, если он был найден в массиве $haystack, иначе FALSE.

Обратите внимание, что эта функция может возвращать как boolean FALSE, так и не-boolean значение, которое приводится к FALSE, например, 0 или "". Так в первом поиске результат - 0 (ключ элемента), а во втором - false (не найдено).

  Ответить  
 
 автор: xpom   (20.02.2012 в 00:22)   письмо автору
 
   для: Роккер Руслан   (19.02.2012 в 21:55)
 

а у меня текст выводится в кодировке 1251...а здесь UTF-8 стоит, мне 1251 поставить? Я с функцией mb_strtolower не знаком, первый раз встречаю...

  Ответить  
 
 автор: Sfinks   (20.02.2012 в 00:55)   письмо автору
 
   для: xpom   (20.02.2012 в 00:22)
 

можно поставить cp1251 вместо utf-8
можно mb_strtolower($needle, 'UTF-8'); заменить на strtolower($needle);
_________
если в моем варианте, то mb_strtolower( $a , "utf-8" ); тоже надо исправить.

  Ответить  
 
 автор: xpom   (20.02.2012 в 01:05)   письмо автору
 
   для: Sfinks   (20.02.2012 в 00:55)
 

подскажите, если в цикле находятся строки, т.е. фраза под каждым значениям, можно исправить функцию, чтобы слово искало в строках массива?

  Ответить  
 
 автор: xpom   (20.02.2012 в 01:12)   письмо автору
 
   для: xpom   (20.02.2012 в 01:05)
 

у меня вообще идет два массива в значениях которых строки, и мне нужно найти совпадение строк в этих массивах, хоть даже по одному слову из строк, вот один массив я разбиваю каждое значение на слова через пробелы и и каждое слово ищу в строковых значениях другого массива, вот таким вот перебором....может кто знает другой вариант такого поиска, подскажите или тогда как эти функции можно исправить под такой поиск?

  Ответить  
 
 автор: Sfinks   (20.02.2012 в 05:11)   письмо автору
 
   для: xpom   (20.02.2012 в 01:12)
 

<?php

  $array_haystack 
= array( "за окном","стояла","хорошая погода и","температура была","умеренная");
  
$array_needle   = array( "Хорошая","Плохая","Умеренная");

  
$str " ".implode" " $array_haystack )." ";
  foreach(
$array_needle as $val)
    echo 
preg_match"#\h$val\h#ui" $str )."<br>";

?>
не плохо было бы сразу четко формулировать задачу. Абсолютно разные задачи, абсолютно разные решения.

  Ответить  
 
 автор: Роккер Руслан   (20.02.2012 в 05:28)   письмо автору
 
   для: Sfinks   (20.02.2012 в 05:11)
 

Ну да... я немного не доучёл) На счет возвращаемых значениях)))) Но те условия что вы сказали вналаче она выполняла)

  Ответить  
 
 автор: Sfinks   (20.02.2012 в 06:12)   письмо автору
 
   для: Роккер Руслан   (20.02.2012 в 05:28)
 

Да я это не вам писал )))
Это комментарий к функции. Обратил внимание на то что ее нельзя проверять типа:
if( ! array_isearch( ... ) ) // значит совпадений нету. Не значит!
а вот
if( array_isearch( ... ) === false ) // - вот это значит совпадений нету!

  Ответить  
 
 автор: Роккер Руслан   (20.02.2012 в 09:17)   письмо автору
 
   для: Sfinks   (20.02.2012 в 06:12)
 

Ах)) я просто глянул что там другое - подумал что не так что написал) не посмотрел на код) на пары бежать надо было)))

  Ответить  
 
 автор: xpom   (20.02.2012 в 19:20)   письмо автору
 
   для: Роккер Руслан   (20.02.2012 в 05:28)
 

это я виноват( не то спросил.сори

  Ответить  
 
 автор: Valick   (20.02.2012 в 11:38)   письмо автору
 
   для: xpom   (20.02.2012 в 01:12)
 

Расскажите подробнее что за массивы и почему не используете базу данных?

  Ответить  
 
 автор: xpom   (20.02.2012 в 19:12)   письмо автору
 
   для: Valick   (20.02.2012 в 11:38)
 

Sfinks, Вы уж простите, что сразу не написал, это я сам не додумал, думал про массивы, чтобы в массивах сделать, а то что там строки потом уже понял...

Valick, я сделал в варианте с базой данных, через LIKE, который строю в цикле, потому что строку на слова делю и каждое слово нужно искать, но это было бы хорошо все, но еще сам запрос к базе пришлось запихнуть в цикл, а таких строк 50, нужно сверить, при каждой загрузке страницы...т.е. за одну загрузку 50 подключений к базе, это наверняка тормозить будет, с массивами я думаю будет быстрей?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования