|
|
|
| какой функцией можно искать значения в массиве без учета регистра символов?
хотел in_array() искать, оказывается учитывает регистр символов... | |
|
|
|
|
|
|
|
для: 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 минут) Кто знает лучше - поделитесь) | |
|
|
|
|
|
|
|
для: Роккер Руслан
(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_search( mb_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 (не найдено). | |
|
|
|
|
|
|
|
для: Роккер Руслан
(19.02.2012 в 21:55)
| | а у меня текст выводится в кодировке 1251...а здесь UTF-8 стоит, мне 1251 поставить? Я с функцией mb_strtolower не знаком, первый раз встречаю... | |
|
|
|
|
|
|
|
для: xpom
(20.02.2012 в 00:22)
| | можно поставить cp1251 вместо utf-8
можно mb_strtolower($needle, 'UTF-8'); заменить на strtolower($needle);
_________
если в моем варианте, то mb_strtolower( $a , "utf-8" ); тоже надо исправить. | |
|
|
|
|
|
|
|
для: Sfinks
(20.02.2012 в 00:55)
| | подскажите, если в цикле находятся строки, т.е. фраза под каждым значениям, можно исправить функцию, чтобы слово искало в строках массива? | |
|
|
|
|
|
|
|
для: xpom
(20.02.2012 в 01:05)
| | у меня вообще идет два массива в значениях которых строки, и мне нужно найти совпадение строк в этих массивах, хоть даже по одному слову из строк, вот один массив я разбиваю каждое значение на слова через пробелы и и каждое слово ищу в строковых значениях другого массива, вот таким вот перебором....может кто знает другой вариант такого поиска, подскажите или тогда как эти функции можно исправить под такой поиск? | |
|
|
|
|
|
|
|
для: 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>";
?>
| не плохо было бы сразу четко формулировать задачу. Абсолютно разные задачи, абсолютно разные решения. | |
|
|
|
|
|
|
|
для: Sfinks
(20.02.2012 в 05:11)
| | Ну да... я немного не доучёл) На счет возвращаемых значениях)))) Но те условия что вы сказали вналаче она выполняла) | |
|
|
|
|
|
|
|
для: Роккер Руслан
(20.02.2012 в 05:28)
| | Да я это не вам писал )))
Это комментарий к функции. Обратил внимание на то что ее нельзя проверять типа:
if( ! array_isearch( ... ) ) // значит совпадений нету. Не значит!
| а вот
if( array_isearch( ... ) === false ) // - вот это значит совпадений нету!
|
| |
|
|
|
|
|
|
|
для: Sfinks
(20.02.2012 в 06:12)
| | Ах)) я просто глянул что там другое - подумал что не так что написал) не посмотрел на код) на пары бежать надо было))) | |
|
|
|
|
|
|
|
для: Роккер Руслан
(20.02.2012 в 05:28)
| | это я виноват( не то спросил.сори | |
|
|
|
|
|
|
|
для: xpom
(20.02.2012 в 01:12)
| | Расскажите подробнее что за массивы и почему не используете базу данных? | |
|
|
|
|
|
|
|
для: Valick
(20.02.2012 в 11:38)
| | Sfinks, Вы уж простите, что сразу не написал, это я сам не додумал, думал про массивы, чтобы в массивах сделать, а то что там строки потом уже понял...
Valick, я сделал в варианте с базой данных, через LIKE, который строю в цикле, потому что строку на слова делю и каждое слово нужно искать, но это было бы хорошо все, но еще сам запрос к базе пришлось запихнуть в цикл, а таких строк 50, нужно сверить, при каждой загрузке страницы...т.е. за одну загрузку 50 подключений к базе, это наверняка тормозить будет, с массивами я думаю будет быстрей? | |
|
|
|