За последние 24 часа нас посетили 17567 программистов и 1687 роботов. Сейчас ищут 943 программиста ...

Массивы строк, замена букв

Тема в разделе "PHP для новичков", создана пользователем Rumato, 20 янв 2011.

  1. Rumato

    Rumato Активный пользователь

    С нами с:
    26 дек 2010
    Сообщения:
    77
    Симпатии:
    0
    Здравствуйте, помогите, пожалуйста. есть массив строк - слов. нужно заменить некоторые буквы в словах на другие, как это реализовать? в учебника смотрел как-то не нашёл или смотрел не там или...
     
  2. Rumato

    Rumato Активный пользователь

    С нами с:
    26 дек 2010
    Сообщения:
    77
    Симпатии:
    0
    один из способов это вот:
    Код (Text):
    1.  $a = array("кот", "Дом", "гром");
    2. $str = str_replace("к", "г", $a);
    3. $str = str_replace("м", "и", $a);
    4.  print_r($str);  
    есть ещё какие либо варианты, здесь мне не нравится то, что
    Код (Text):
    1.  $str = str_replace("к", "г", $a);
    - колличество таких функций может быть очень большим, с ростом букв для замены
     
  3. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Код (Text):
    1. $a// массив
    2.  
    3. $new= implode(",", $a); // преобразовали в строку (слова через запятую)
    4.  
    5. $healthy = array("fruits", "vegetables", "fiber");
    6. $yummy   = array("pizza", "beer", "ice cream");
    7.  
    8. $str = str_replace($healthy, $yummy, $new)
    9.  
    10. $a=explode(",", $str); // снова массив
    11.  
    12. echo $a
     
  4. runner

    runner Активный пользователь

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
  5. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Runner, а что я ему по твоему предложил ???..))
    Если ты будешь внимательным функция str_ireplace работает исключительно со строкой поэтому массив сначала надо преобразовать в строку с помощью implode.

    Значения поиска и замены можно задать в виде массива. Но сама фунция str_ireplace применяется к строке !.

    После преобразований мы делаем из строки снова массив с помощью функции explode.
     
  6. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Кажется, тебе самому бы сначала надо быть повнимательней и повежливей.
     
  7. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    гы=) Оригинально

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

    runner Активный пользователь

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    Dima4321
    честно говоря, я не понял твой пример по следующим причинам
    1) речь шла о замене букв, а у тебя пример с массивами слов. Здесь, конечно, я ошибся.
    2) поскольку синтаксис функции str_replace позволяет использовать в качестве subject массив, то были непонятны манипуляции с implode explode
    mixed str_replace ( mixed search, mixed replace, mixed subject [, int &count])


    Поэтому я посчитал твой ответ неадекватным и предложил свой вариант
     
  9. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    PHP:
    1.       <?PHP
    2.       ini_set('display_errors',1);
    3.       error_reporting(E_ALL);
    4.      
    5.      
    6.       $a=array('dog','cat','map');
    7.       $poisk=array('d','a','m');
    8.       $zamena=array('s','o','k');
    9.       $new=str_ireplace($poisk,$zamena,$a);
    10.       print_r($new);
    11.      
    12.         ?>
    Apple где ты уловил мою не вежливость ??. Я всегда предельно тактичен.

    Ну а ..не ошибаются только мертвые виноват.
     
  10. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    runner извини не посмотрел что строка может быть массивом.
    Хотя мой код все равно полезен, хотя бы для изучений функций implode и explode ))
     
  11. Rumato

    Rumato Активный пользователь

    С нами с:
    26 дек 2010
    Сообщения:
    77
    Симпатии:
    0
    вот до компа добрался)) я примеры ваши посмотрел, большое спасибо за них, вот только проблемка получается

    когда я беру код:
    Код (Text):
    1. <?PHP
    2.        ini_set('display_errors',1);
    3.        error_reporting(E_ALL);
    4.      
    5.      
    6.        $a=array('dog','cat','map');
    7.        $poisk=array('d','a','m');
    8.        $zamena=array('s','o','k');
    9.        $new=str_ireplace($poisk,$zamena,$a);
    10.        print_r($new);
    11.      
    12.          ?>
    работает хорошо с латиницей, а слова где кириллица там буквы не меняем, в чем может быть проблема?
     
  12. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Ммм... кодировка? Или просто забыли английские на русские заменить?
     
  13. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    PHP:
    1. <?PHP
    2.        ini_set('display_errors',1);
    3.        error_reporting(E_ALL);
    4.  setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
    5.      
    6.      
    7.        $a=array('dog','cat','map');
    8.        $poisk=array('d','a','m');
    9.        $zamena=array('s','o','k');
    10.        $new=str_ireplace($poisk,$zamena,$a);
    11.        print_r($new);
    12.      
    13.          ?>
    Выставил тебе локаль. Сейчас заработает с русскими.
     
  14. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    эээ одному мне кажется, что чтобы были русские буквы, их сначала нужно в коде прописать?
     
  15. Rumato

    Rumato Активный пользователь

    С нами с:
    26 дек 2010
    Сообщения:
    77
    Симпатии:
    0
    ну,это я как пример привёл вообще вот моя модификация того скрипта
    Код (Text):
    1.  $path="in.txt";//тут куча слов, они русские
    2. $a=file($path);  // массив строк, которые можно обработать и
    3.        $poisk=array('к','а','m');
    4.        $zamena=array('г','f','k');
    5.        $new=str_ireplace($poisk,$zamena,$a);
    6.        print_r($new);
    за любую помощь буду благодарен=)
     
  16. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Тогда советую проверить кодировку скрипта и входных данных. Скорее всего кодировки разные.
     
  17. Rumato

    Rumato Активный пользователь

    С нами с:
    26 дек 2010
    Сообщения:
    77
    Симпатии:
    0
    да, наверное, сейчас посмотрю
     
  18. Rumato

    Rumato Активный пользователь

    С нами с:
    26 дек 2010
    Сообщения:
    77
    Симпатии:
    0
    Dima4321, <?=RPG?>, спасибо большое, дело в кодировке было, пересохранил файл и заработало
     
  19. Rumato

    Rumato Активный пользователь

    С нами с:
    26 дек 2010
    Сообщения:
    77
    Симпатии:
    0
    пользуясь случаем в продолжение, вопрос, а если нет возможность поменять кодировку входных данных, то что тогда делать? например, будет проблемой, если сайт с одной кодировкой, я пишу скрипт с другой, который должен его парсить
     
  20. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
  21. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Поменять кодировку скрипта.
     
  22. Rumato

    Rumato Активный пользователь

    С нами с:
    26 дек 2010
    Сообщения:
    77
    Симпатии:
    0
    вот что получилось, только не понимаю почему не выводит индексы элементов
    Код (Text):
    1.  
    2. $path="in.txt";
    3. $a=file($path);  // массив строк, которые можно обработать и
    4.        $poisk=array('к','а','m');
    5.        $zamena=array('г','f','k');
    6.        $new=str_ireplace($poisk,$zamena,$a);
    7.        
    8. for($i = 0; $i < count($new); $i++){
    9.   echo  key($new). $new[$i]."<br/>";
    10. }
    ведь key($new) - это же ключ т.е. номер элемента, я пробывал и так $key - всё рано не работает, в чем может быть проблема?
    я только учусь - всё непонятно
     
  23. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Код (Text):
    1. $path="in.txt";
    2. $a=file($path);  // массив строк, которые можно обработать и
    3.        $poisk=array('к','а','m');
    4.        $zamena=array('г','f','k');
    5.        $new=str_ireplace($poisk,$zamena,$a);
    6.        
    7. foreach($new as $key=>$value)
    8.  
    9. {
    10. echo $key. $value.'<br>';
    11.  
    12. }
     
  24. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Код (Text):
    1. $path="in.txt";
    2. $a=file($path);  // массив строк, которые можно обработать и
    3.        $poisk=array('к','а','m');
    4.        $zamena=array('г','f','k');
    5.        $new=str_ireplace($poisk,$zamena,$a);
    6.        
    7. for($i = 0; $i < count($new); $i++)
    8. {
    9.   echo $i.  $new[$i]. "<br>";
    10. }