перевести все элементы массива в нижний регистр

zilon

Постоялец
Регистрация
30 Июл 2011
Сообщения
370
Реакции
146
надо в текстовой файле найти дубли строк и если они там есть то
PHP:
echo 'дублей строк быть не должно';
die ();
а если нету то продолжить выполнение скрипта...

файл берётся через file_get_contents, режится explod-ом по переносу строк, потом ищутся дубликаты. Для начала с простым масивом разбираюсь, вот такой код вроде как 2 слова авто и Авто - дубли но он дубли не находит и выводит четыре раза - повторений не найдено. А если всё будет в нижнем регистре то найдёт дубль. А как все элементы массива в нижний регистр перевести и прочекать на дубли? Подскажите пожалуйста :thenks:

PHP:
<?php

$massiv = array ('авто', 'видео', 'культура', 'Aвто',);
$massiv_dulikat = array_count_values ($massiv);

foreach ($massiv_dulikat as $key => $value)
{

    if ($value >= 2)
    {
        echo '<h2>Ошибка</h2><br>дублей строк быть не должно';
        die();
    }
    else
    {
       echo 'повторений не найдено<br>';
    }

}


?>
 
Код:
 $massiv = array_map('strtolower', $massiv);

то что надо но после перевода в нижний регистр бьётся кодировка вот

PHP:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<?
$massiv = array ('авто', 'видео', 'культура', 'Aвто',);
foreach ($massiv as $v)
{
    echo $v . '<br>';
}
$massiv = array_map('strtolower', $massiv);
foreach ($massiv as $v)
{
    echo $v . '<br>';
}
$massiv_dulikat = array_count_values ($massiv);
foreach ($massiv_dulikat as $key => $value)
{
    if ($value >= 2)
    {
        echo '<h2>Ошибка</h2><br>дублей строк быть не должно';
        die();
    }
    else
    {
      echo 'повторений не найдено<br>';
    }
}
?>


выводит

авто
видео
культура
Aвто
����
�����
��������
a���
повторений не найдено
повторений не найдено
повторений не найдено
повторений не найдено

её можно как не будь поправить? пробовал через
PHP:
$v = iconv("utf-8", "cp1251", $v);
и наоборот но не выходит
 
Для просмотра ссылки Войди или Зарегистрируйся

точно такая же фунция нужна но только чтоб меняла не ключи а переменные :thenks:
 
то что надо но после перевода в нижний регистр бьётся кодировка вот

PHP:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<?
$massiv = array ('авто', 'видео', 'культура', 'Aвто',);
foreach ($massiv as $v)
{
    echo $v . '<br>';
}
$massiv = array_map('strtolower', $massiv);
foreach ($massiv as $v)
{
    echo $v . '<br>';
}
$massiv_dulikat = array_count_values ($massiv);
foreach ($massiv_dulikat as $key => $value)
{
    if ($value >= 2)
    {
        echo '<h2>Ошибка</h2><br>дублей строк быть не должно';
        die();
    }
    else
    {
      echo 'повторений не найдено<br>';
    }
}
?>


выводит



её можно как не будь поправить? пробовал через
PHP:
$v = iconv("utf-8", "cp1251", $v);
и наоборот но не выходит

Все работает(код в спойлере). У тебя сама страница в какой кодировке?
 

Вложения

  • test.png
    test.png
    7,8 KB · Просмотры: 11
если пхп версии >=5.4 то strtolower поддерживает мультибайтовость, если ниже то юзани mb_strtolower
 
Все работает(код в спойлере). У тебя сама страница в какой кодировке?

скрипт в utf-8
это ужас какой-то :dead:

попробовал скомбинировать два одинаковых массива этой фунцией Для просмотра ссылки Войди или Зарегистрируйся потом этой фунцией в нижним регистре вывести Для просмотра ссылки Войди или Зарегистрируйся кеи но опять кодировка битая оказалась это пздц товарищи! :dead::dead::dead:

если пхп версии >=5.4 то strtolower поддерживает мультибайтовость, если ниже то юзани mb_strtolower

пробовал так
PHP:
$massiv = array_map('mb_strtolower', $massiv);
но опять кодировка не такая

_________

на дедике всё нормально отображается а на локалке кодировка битая...это просто убийство... просто лишение права на поклёвку... с этим не живут :dead::pop:
 

Вложения

  • Безымянный.png
    Безымянный.png
    21,1 KB · Просмотры: 5
Последнее редактирование:
на дедике всё нормально отображается а на локалке кодировка битая
Сравните значения mbstring.internal_encoding в php.ini на дедике и на локалке.
Если изменить его не получится, то как вариант, mb_strtolower может принимать вторым аргументом кодировку. Указать UTF-8, но тогда использовать не array_map, а array_walk описав свою функцию-обёртку для mb_strtolower с нужным аргументом.
 
Назад
Сверху