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

Статус
Закрыто для дальнейших ответов.

Volly

Well-Known Member
Регистрация
21.03.2012
Сообщения
837
Имеем
$n = 2; // может быть от 0 и до количества слэшей, а может и больше
$str = '/aaa/sss/ddd/fff/file.php';

надо разрезать на две по $n считая справа налево
$left = '/aaa/sss/ddd';
$right = '/fff/file.php';

Делаю explode по слэшам, считаю количество, объединяю часть массива в одну строку, другую часть массива во вторую строку.
Получается не красиво и много кода.
Посоветуйте другие способы. Спасибо
 

lekzd

parse error: parse error, unexpected T_STRING...
Регистрация
17.02.2011
Сообщения
1 125
используйте регулярку
Код:
$n = 2; // может быть от 0 и до количества слэшей, а может и больше
$str = '/aaa/sss/ddd/fff/file.php';

$returnValue = preg_match('/(.*)((\/.*){'.$n.'})/',$str, $matches);

$left = $matches[1];
$right = $matches[2];
возможны баги, конечно, но для примера из поста подходит
 

Volly

Well-Known Member
Регистрация
21.03.2012
Сообщения
837
lekzd, спасибки за красивое решение. Работает как надо во всех случаях, кроме случая строки без слэша.
Немного попробую его переделать.
Нужно чтоб при $n = 0 и $str = 'file.php' $left был пустой, а $right =содержал file.php
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 138
Код:
if ($n === 0 && preg_match("~[a-z]*\.[a-z]*~", $str) === false){
  $right = $str;
} else {
  $returnValue = preg_match('/(.*)((\/.*){'.$n.'})/',$str, $matches);
  $left = $matches[1];
  $right = $matches[2];
}
Может не так изящно... )))
 

Volly

Well-Known Member
Регистрация
21.03.2012
Сообщения
837
Ну вот, сообща и решили. Немного подправлю и использую. Спасибки
 
Статус
Закрыто для дальнейших ответов.
Верх Низ