За последние 24 часа нас посетили 17335 программистов и 1617 роботов. Сейчас ищут 1123 программиста ...

Использование explode

Тема в разделе "PHP для новичков", создана пользователем nAgi, 12 ноя 2007.

  1. nAgi

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

    С нами с:
    12 сен 2007
    Сообщения:
    43
    Симпатии:
    0
    Как правильно занести в массив строку разбив её на три элемента (разделённых)
    Первый по двоеточию, второй точка с запятой?

    PHP:
    1. $text ="АВТОРЫНОК   : КУПЛЮ    ; Куплю подшипники Т.8-9277-71-29-28.";
    2.  
    3. $my_page = explode(":", $text);//пробую так
     
  2. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    PHP:
    1.  
    2. <?php
    3. $result = array();
    4. $text = 'АВТОРЫНОК  : КУПЛЮ    ; Куплю подшипники Т.8-9277-71-29-28.';
    5. $tmp = explode(';', $text);
    6. $result[] = $tmp[1];
    7. $result = array_merge($result, explode(':', $tmp[0]));
    8. print_r($result);
    9.  
     
  3. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    А я бы так сделал:
    PHP:
    1. <?php
    2. $result = array();
    3. $text ="АВТОРЫНОК  : КУПЛЮ    ; Куплю подшипники Т.8-9277-71-29-28.";
    4. $array = explode(':', $text);
    5. $result[] = $array[0];
    6. $array = explode(';', $array[1]);
    7. $result = array_merge($result, $array);
    8. $result = array_map('trim', $result);
    9. print($result);
    Потому что массив понятнее: $result[0] где (авторынок), $result[1] что (куплю), $result[2] что товар (какую-то шняшку). Да и в "задании" именно так: "Первый по двоеточию, второй точка с запятой".
     
  4. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    PHP:
    1. <?php
    2. $text="АВТОРЫНОК  : КУПЛЮ    ; Куплю подшипники Т.8-9277-71-29-28.";
    3. $text=preg_replace("{:}",";",$text,1);
    4. print_r(explode(";",$text));
    5. ?>
     
  5. nAgi

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

    С нами с:
    12 сен 2007
    Сообщения:
    43
    Симпатии:
    0
    Спасибо постораюсь сёдня реализовать, напишу как получилось.
     
  6. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Dagdamor
    Тогда уж str_replace() юзать, уж он в десятки раз быстрее при таких простых задачах. Убил бы за такую трату ресурсов :D
     
  7. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Psih
    У str_replace нет параметра limit - я бы тоже его использовал, если бы он был. :)
    А насчет траты ресурсов - опять регэкспофобия :) какая может быть трата на таком примитивном паттерне?
    Хотя конечно надо замерять.
     
  8. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Dagdamor
    1). Зачем limit?
    2). Регулярки сами по себе сложнее. Если не нужны сложные условия - строковыми функциями куда быстрее это делается (не факт что удобнее).
     
  9. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. <?php
    2. $str = 'АВТОРЫНОК  : КУПЛЮ    ; Куплю подшипники Т.8-9277-71-29-28.';
    3. $res = array();
    4. $res[] = strtok($str, ':');
    5. $res[] = strtok(';');
    6. $res[] = substr(strstr($str, ';'), 1);
    7.  
    8. print_r($res);
    Код (Text):
    1. Array ( [0] => АВТОРЫНОК [1] => КУПЛЮ [2] => Куплю подшипники Т.8-9277-71-29-28. )