ФорумПрограммированиеPHP для идиотов → Разделить строку на две части

Разделить строку на две части

  • SVat

    Сообщения: 23 Репутация: N Группа: Кто попало

    Spritz Июнь 5, 2012, 11:27 д.п.

    Здраствуйте! Имея строку такого вида: one/two/three нужно получить две строки:
    1: three
    2: one/two
    или из такой строки: one/two/three/four/five должно получиться:
    1: five
    2: one/two/three/four

    Пока сделал так:

    $str = 'one/two/three';
    $str1 = basename($str);
    $str2 = substr($str, 0, -strlen($str1));

    Если знаете более элегантное решение, подскажите пожалуйста?
  • SVat

    Сообщения: 23 Репутация: N Группа: Кто попало

    Spritz Июнь 5, 2012, 11:47 д.п., спустя 20 минут 13 секунд

    Ещё можно так:

    $str = 'one/two/three';
    $str1 = basename($str);
    $str2 = implode('/', explode('/', $str, -1));
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz Июнь 6, 2012, 12:08 д.п., спустя 12 часов 20 минут 29 секунд

    Я думаю вот эти функции наиболее уместны:
    http://ru2.php.net/manual/ru/function.strrpos.php
    http://ru2.php.net/manual/ru/function.strrchr.php
  • SVat

    Сообщения: 23 Репутация: N Группа: Кто попало

    Spritz Июнь 6, 2012, 12:27 д.п., спустя 19 минут 52 секунды

    AlexB, вместо basename конечно можно использовать strrchr, хотя с такой строкой, где раделителями являются слеши, basename отлично подходит, а вот strrpos мне кажется здесь будет лишним. Спасибо!
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Июнь 6, 2012, 2:21 д.п., спустя 1 час 53 минуты 24 секунды

    а) если basename() то почему бы не добавить dirname() ?

    б) substr($str, 0, -strlen($str1))

    в) explode(), array_pop(), implode()
    ιιlllιlllι унц-унц
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz Июнь 6, 2012, 3:01 д.п., спустя 39 минут 45 секунд


    AlexB, вместо basename конечно можно использовать strrchr, хотя с такой строкой, где раделителями являются слеши, basename отлично подходит, а вот strrpos мне кажется здесь будет лишним. Спасибо!
    strrpos как раз самое корректное - она покажет позицию вхождения последнего слеша, после чего мы гарантировано возьмем то что до него и то что после. Т.е. единый подход для нахождения первой и второй подстрок.

    А если basename, то r2d2 верно заметил - тогда логично использовать dirname.
  • SVat

    Сообщения: 23 Репутация: N Группа: Кто попало

    Spritz Июнь 8, 2012, 7:43 д.п., спустя 2 дня 4 часа 42 минуты

    Да, про dirname я что то совсем забыл. Спасибо!

Пожалуйста, авторизуйтесь, чтобы написать комментарий!