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

Тема в разделе "Как сделать...", создана пользователем zilon, 2 дек 2013.

  1. zilon

    zilon

    Регистр.:
    30 июл 2011
    Сообщения:
    370
    Симпатии:
    147
    надо в текстовой файле найти дубли строк и если они там есть то
    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>';
        }

    }


    ?>
     
  2. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    360
    Симпатии:
    243
    Код:
     $massiv = array_map('strtolower', $massiv);
     
    Wounderer и zilon нравится это.
  3. zilon

    zilon

    Регистр.:
    30 июл 2011
    Сообщения:
    370
    Симпатии:
    147
    то что надо но после перевода в нижний регистр бьётся кодировка вот

    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);
    и наоборот но не выходит
     
    асс нравится это.
  4. zilon

    zilon

    Регистр.:
    30 июл 2011
    Сообщения:
    370
    Симпатии:
    147
  5. ZOLK

    ZOLK

    Регистр.:
    13 сен 2011
    Сообщения:
    189
    Симпатии:
    107
    Все работает(код в спойлере). У тебя сама страница в какой кодировке?
     

    Вложения:

    • test.png
      test.png
      Размер файла:
      7,8 КБ
      Просмотров:
      11
  6. Шёпот

    Шёпот Писатель

    Регистр.:
    29 ноя 2013
    Сообщения:
    9
    Симпатии:
    2
    если пхп версии >=5.4 то strtolower поддерживает мультибайтовость, если ниже то юзани mb_strtolower
     
  7. zilon

    zilon

    Регистр.:
    30 июл 2011
    Сообщения:
    370
    Симпатии:
    147
    скрипт в utf-8
    это ужас какой-то :dead:

    попробовал скомбинировать два одинаковых массива этой фунцией http://www.php.net/manual/ru/function.array-combine.php потом этой фунцией в нижним регистре вывести http://www.php.net/manual/ru/function.array-change-key-case.php кеи но опять кодировка битая оказалась это пздц товарищи! :dead::dead::dead:

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

    _________

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

    Вложения:

    Последнее редактирование: 2 дек 2013
  8. Darkmind

    Darkmind SNMP maniac

    Регистр.:
    31 май 2006
    Сообщения:
    183
    Симпатии:
    75
    Сравните значения mbstring.internal_encoding в php.ini на дедике и на локалке.
    Если изменить его не получится, то как вариант, mb_strtolower может принимать вторым аргументом кодировку. Указать UTF-8, но тогда использовать не array_map, а array_walk описав свою функцию-обёртку для mb_strtolower с нужным аргументом.
     
    zilon нравится это.