Platton
@Platton

Как разбить строки php?

Здравствуйте. Подскажите какие использовать функции php чтобы разбить строки урл запросов.
Например есть патчи url такого вида:
/category/page.html
/page3.html
/category1/category2/
/category/

Мне нужно получить массив содержащий последовательную иерархию урл-запроса.
Например есть стока: /category1/category2/page.html
Нужно получить массив:
Array (
[0] => "/category1/",
[1] => "/category1/category2/",
[2] => "/category1/category2/page.html"
)
или
/category1/category2/
Array (
[0] => "/category1/",
[1] => "/category1/category2/"
)
  • Вопрос задан
  • 164 просмотра
Пригласить эксперта
Ответы на вопрос 4
27cm
@27cm
TODO: Написать статус
$str = '/category1/category2/page.html';

$parts = preg_split('/(?<=\w\/)(?=\w)/', $str, -1, PREG_SPLIT_NO_EMPTY);
for ($i = 1; $i < sizeof($parts); $i++) {
    $parts[$i] = $parts[$i - 1] . $parts[$i];
}


ideone.com/5usIN4
Ответ написан
Комментировать
VladimirAndreev
@VladimirAndreev
php web dev
Штатными средствами такое не получить
Ответ написан
Комментировать
riky
@riky
Laravel
$str = '/category1/category2/page.html';
$items = explode("/", $str);
$result = [];
for ($i = 1; $i < count($items); $i++) {
    $result[] = implode("/", array_slice($items, 0, $i));
}

код требует доработки, но в целом можно так
Ответ написан
Комментировать
Изучите функцию preg_match, там есть 3 параметр $matches, в него и будете получать последовательную иерархию урл-запроса.

if (preg_match('%^(\w+.*)/(\d+)-(\w+.*).html$%', $pathInfo, $matches)) {
            $params['calias'] = $matches[1];
            $params['id'] = $matches[2];
            $params['alias'] = $matches[3];
        }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы