Удалить дубликаты, предпочитая регистр (php)

12
HM
На сайте с 14.01.2012
Offline
223
#11

LEOnidUKG, я чего-то не понял, но зачем тут MB_CASE_TITLE?

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#12
hakuna matata:
LEOnidUKG, я чего-то не понял, но зачем тут MB_CASE_TITLE?

А он поднимает первую букву в начале строки(пробела, точки и даже тире), остальные буквы опускает. Так же он многобайтовый т.е. работает с кодировкой UTF-8 без костылей.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
toxic steel
На сайте с 28.12.2007
Offline
175
#13
Т.е. заглавная буква может быть не только в начале, но в середине, или вообще - целиком из заглавных букв.

В этом весь смысл, да.

а если будет СНТО?

Будет.

Если это нужно одноразово

Для одноразовой задачи изящность нафиг не нужна :) Постоянно используемая опция будет.

думаю мало там таких значений, которые должны быть все с большой буквы.

Вообще не вариант. На самом деле - там очень специфический словарь, города просто первый попавшийся пример, по факту там спецтерминология и аббревиатур очень много.

.

Блин, код в облако перед уходом не закинул, теперь только до понедельника 🙄 :o

Пока логика такая:

foreach по массиву и проверка каждого значения на наличие заглавных букв простым preg_match [А-ЯA-Z]

по результатам проверки значение пишется в один из временных массивов - в массив, где только нижний регистр ($lower), либо в массив, где любое значение содержит как минимум один заглавный символ ($upper).

Массив с заглавными символами дублируется ($tmp_upper), копия переводится в нижний регистр (кстати, можно делать сразу третий массив прямо в foreach, чтобы array_map не насиловать).

Дальше array_diff ($lower, $tmp_upper) и склейка $upper и остатков $lower.

Ну это я так, на пальцах. Вроде кратко, наглядно и не сильно дофига лишних операций...

Есть отличные, недорогие рекламные места на агрофоруме (http://farmerforum.ru/viewtopic.php?t=1725)! Клуб истинных ценителей денег (http://coinshunter.ru/).
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#14
На самом деле - там очень специфический словарь

Без ТЗ - результат ХЗ :)

HM
На сайте с 14.01.2012
Offline
223
#15
LEOnidUKG:
А он поднимает первую букву в начале строки(пробела, точки и даже тире), остальные буквы опускает. Так же он многобайтовый т.е. работает с кодировкой UTF-8 без костылей.

Я читал документацию, но не видел этого в ТЗ.

X
На сайте с 09.11.2006
Offline
132
#16
toxic steel:


foreach по массиву и проверка каждого значения на наличие заглавных букв простым preg_match [А-ЯA-Z]

Или каждое значение с самим собой сравнить - оригинал и версию strtolower - если не равны, то есть заглавные

toxic steel
На сайте с 28.12.2007
Offline
175
#17
LEOnidUKG:
Без ТЗ - результат ХЗ :)

Отвечу присказкой про плохого танцора ;)

Задача сформулирована - привести варианты из первого сообщения к итогу, указанному в первом сообщении. Уж куда понятней?

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

Назначать исключения и предполагать возможные варианты - заведомо городить костыли.

xtumen:
Или каждое значение с самим собой сравнить - оригинал и версию strtolower - если не равны, то есть заглавные

да, думал и над таким вариантом. надо померить, что ли, ради спортивного интереса как быстрей будет 🙄

S
На сайте с 30.09.2016
Offline
469
#18
toxic steel:
Задача сформулирована

И решена в сообщениях #2 и #6.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
toxic steel
На сайте с 28.12.2007
Offline
175
#19

Дык - да. Спасибо за варианты, есть над чем думать.

И наличие двух версий лишь доказывает, что присказка про тз-хз была ни к месту, о чём и был мой предыдущий пост.

А мой вариант - я посчитал должным не сидеть на попе ровно в ожидании ответа, а тоже подумать над решением, мне показалось правильным им тоже поделиться.

Сравнить и выбрать из трёх версий - теперь только в понедельник.

🍾

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий