БлогNot. PHP: исключить из массива одинаковые строки независимо от регистра символов

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

PHP: исключить из массива одинаковые строки независимо от регистра символов

На PHP исключить из массива одинаковые элементы очень легко - есть готовая функция array_unique. Если значения элементов массива это строки и исключать элементы нужно независимо от регистра символов (бАСя = БАСЯ = бася), функция перестаёт быть полезной.

Но, если немного помучиться, легко написать свою функцию для этой цели:

function array_iunique ($array) { 
  //Удаление лишних элементов массива с игнорированием регистра символов
 return array_intersect_key( $array,array_unique (array_map ('toLower',$array)));
}

Здесь к каждому элементу массива применяется пользовательская функция toLower для приведения его к нижнему регистру символов. Настройка локали бывает разная на разных хостах, и если объём данных не слишком велик, лучше не надеяться на стандартную strtolower, а надстроить над ней свою toLower, например, для учёта кириллицы такую:

function toLower($string) { //преобразовать строку к нижнему регистру
 return strtr(strtolower($string),'ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ','ёйцукенгшщзхъфывапролджэячсмитьбю');
};

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

function cmp_ignore_case ($a,$b) { //сравнить строки с игнорированием регистра
 return strcmp(toLower($a),toLower($b));
}
//...
usort ($a,'cmp_ignore_case');

Не нужно также использовать параметр SORT_LOCALE_STRING в array_unique, если не уверены, что у вас на хостинге нужная локаль и Вы её правильно установили из скрипта.

Для себя применил функцию, в частности, в этом сервисе (добавил опцию "Игнорировать регистр символов при сравнении строк", действует на сортировку и удаление повторов).

Также апдейтил простой скрипт для расчёта среднего балла, это быстрее, чем Excel запускать :)


теги: php памятка алгоритм

Здесь можно оставить коментарий, обязательны к заполнению только красные поля. Не пишите лишнего, и всё будет хорошо :)

Ваше имя:
Пароль (если желаете зарегистрировать имя):
Любимый URL (если указываете, то вставьте полностью):
Текст сообщения (до 1024 символов):
 
Введите 2-й код из этих чисел:
39421, 78887, 82685, 73758
 

19.03.2017, 10:28; рейтинг: 1340

  свежие записипоиск по блогукомментироватьстатистика

Наверх Яндекс.Метрика
© PerS
вход