- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Зачем быть уникальным в мире, где все можно скопировать
Почему так важна уникальность текста и как она влияет на SEO
Ingate Organic
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Коллеги, есть здоровенный массив PHP, в котором встречаются дубликаты значений в разных регистрах:
Москва
москва
Санкт-Петербург
санкт-петербург
СНТ
снт
Приозерск
улус
Т.е. заглавная буква может быть не только в начале, но в середине, или вообще - целиком из заглавных букв.
Мне нужно удалить дубликаты в нижнем регистре, сохранив значения, где встречается верхний регистр. Дубликата может не быть, тогда оставляем то, что есть.
Т.е. на выходе из примера я должен получить
Москва
Санкт-Петербург
СНТ
Приозерск
улус
Буду признателен за идеи как сделать это поизящней! :drink:
Не знаю насчёт изящности, но по 1 штуке можно оставить так:
Но из значений типа "МосквА" или "Санкт-петербург" оно будет выбирать первые попавшиеся, которые начинаются с заглавной буквы.
1. Всё закинуть в нижний регистр
2. Очистить от дубликатов
3. Поднять первую букву
1. Всё закинуть в нижний регистр
2. Очистить от дубликатов
3. Поднять первую букву
Не получится:
СНТ
снт
по данному алгоритму не пройдет
Копируем массив в другой и переводим все в нижний регистр(в втором массиве).
Получаем строку 1 массива и записываем его в переменную темп.
Проганяем по массиву2 проверку есть ли там темп(в нижнем регистре).
Если есть - записываем темп в массив номер3
И так по всему списку.
$arr = array('Москва','санкт-петербург','снт','москва','Санкт-Петербург','липецк','лиПецк','снт','Иваново','СНТ','Москва','москва','сНт','МосКва','СНТ','Липецк');
natsort($arr);
function strtolower_utf8($a){
return mb_strtolower($a,'UTF-8');
}
function array_iunique($array) {
return array_intersect_key($array,array_unique(array_map("strtolower_utf8",$array)));
}
$arr=array_iunique($arr);
print_r($arr);
Array ( [8] => Иваново [15] => Липецк [13] => МосКва [9] => СНТ [4] => Санкт-Петербург )
Samail, сильно. Функцию array_intersect_key вообще ни разу не пользовал, интересная вещица.
---------- Добавлено 12.04.2019 в 17:57 ----------
Вот только в этом будет косяк:
При таком массиве:
$arr = array('москва','санкт-петербург','снт','москва','Санкт-Петербург','липецк','лиПецк','снт','Иваново','СНТ','Москва','москва','сНт','МосКва','СНТ','Липецк');Будет
LEOnidUKG, сама функция из интернета, моя идея была в том что-бы массив сначала отсортировать с учётом регистра.
Если никто не против я свой вариант выложу:
Вот только в этом будет косяк:
Цитата:
Т.е. заглавная буква может быть не только в начале, но в середине, или вообще - целиком из заглавных букв.
Может ТС и нужно сохранить заглавную букву в середине если она там есть. Это у меня МосКва, а в настоящем массиве может заглавная и в тему.
if (mb_strlen($str,'UTF-8')<=3) - а если будет СНТО ...или Уфа?
Это он уже пусть решает :)
Если это нужно одноразово, то там можно обойтись и str_replace, думаю мало там таких значений, которые должны быть все с большой буквы.
---------- Добавлено 12.04.2019 в 18:23 ----------
Может ТС и нужно сохранить заглавную букву в середине если она там есть. Это у меня МосКва, а в настоящем массиве может заглавная и в тему.
if (mb_strlen($str,'UTF-8')<=3) - а если будет СНТО ...или Уфа?
Ну переделаем на:
$arr = array('москва','санкт-петербург','снт','москва','Санкт-Петербург','липецк','лиПецк','снт','Иваново','СНТ','Москва','москва','сНт','МосКва','СНТ','Липецк','санкт-петерБург','УльянОвск','уфА');
$arr=array_unique(array_map("strtolower_utf8",$arr));
function strtolower_utf8($str){
$minicity=array('снт','снто'); // Исключения
if (in_array(mb_convert_case($str, MB_CASE_LOWER, "UTF-8"),$minicity)) {
$str = mb_convert_case($str, MB_CASE_UPPER, "UTF-8");
} else {
$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
}
return $str;
}
print_r($arr);
Последняя редакция :)