$a=»/catalog/tovarurl/price/2578/»;
как вырезать ту часть что содержит /price/xxx/, где xxx — произвольный набор знаков и символов
т.е по итогу хочу получить переменную $b=»/catalog/tovarurl/»;
т.е вырезать хвост из переменной включая /price/2578/
и создать переменную $c которая содержит значение xxx в данном случае 2578
Регулярку надо поместить в файл .htaccess я так понимаю?
Можете попробовать использовать substr как вариант…
нет имен в php сделать к url это не относится в конкретном примере. с концом $c уже разобрался а вот как получить из
$a=»/catalog/tovarurl/price/2578/»;
$b=»/catalog/tovarurl/»;
т.е отрезать /price/2578/ это вот не получается где 2578 может быть любое число
Так echo substr($a, 17);
я так понял что 17 это номер символа от начала?
но тут условие еще есть
вот тут $a=»/catalog/tovarurl/price/2578/»;
tovarurl может быть тоже любой длины и вида
вот частный пример
вот тут $a=»/catalog/aaaaxxxxssx/yydyd/price/2578/»;
т.е как то привязку нужно сделать к слову /price/ и удалить его и все что после него из строки $a=»/catalog/aaaaxxxxssx/yydyd/price/2578/»;
разбейте на массив через explode(‘/»,$str);
и посмотрите что в массиве… не того ли вы хотели?
@ufaclub, PHP: strrpos — Manual или PHP: strpos — Manual
Затем — PHP: substr — Manual
PHP:
<?php function getUrlParams($route){ $url = «/»; foreach($params as $param){ if($param === ‘price’){ break; } $url = $url . $param . «https://php.ru/»; } return [$url, $c]; } /* *Тесты */ $route = «/catalog/tovarurl/price/2578/»; $route2 = «/catalog/aaaaxxxxssx/yydyd/price/11111/»; $route3 = «/catalog/aaaaxxxxssx/yydyd/price/sdrfgf/8546733/»; $route4 = «/catalog/aaaax/ssx/yydyd/hsduyuysr/jksdfjsf/price/qweqe/sdrfgf/555555/»;Результат
Код (Text):
Array ( [0] => /catalog/tovarurl/ [1] => 2578 ) Array ( [0] => /catalog/aaaaxxxxssx/yydyd/ [1] => 11111 ) Array ( [0] => /catalog/aaaaxxxxssx/yydyd/ [1] => 8546733 ) Array ( [0] => /catalog/aaaax/ssx/yydyd/hsduyuysr/jksdfjsf/ [1] => 555555 )
А вот как решил gpt
PHP:
function extractUrlAndPrice($url) { // Разбиваем строку на части по разделителю «/» // Ищем индекс элемента «price» // Если элемент «price» найден, удаляем его и все элементы, идущие после него if ($priceIndex !== false) { } // Объединяем оставшиеся элементы в новую строку и возвращаем ее // Извлекаем значение параметра «price» из исходной строки $price = null; $price = $matches[1]; } // Возвращаем результат в виде массива ‘url’ => $newUrl, ‘price’ => $price ); }Мне мой способ больше нравится, его проще читать.
PHP:
$a = «/catalog/tovarurl/price/2578/»;
PHP:
$a = «/catalog/tovarurl/price/2578/»; $str = $match[1]; $c = $match[2];
@Александр Петрович, ещё один говнокодер детектед, объяснять, чем решение криво?
Обязательно объяснять)
Хотя да, правильней будет такой вариант
PHP:
$a = «/catalog/tovarurl/price/2578/»; $str = $match[1]; $c = $match[2];
PHP:
$a = «/catalog//price//»;
Спасибо за объяснения, теперь стало все понятно.
Добавлю от себя разъяснения.
Мое решение — это не истина в конечной инстанции. Я просто подкинул идею. Идея заключается в том, что можно регуляркой вытащить из строки то, что необходимо. Использовать мой вариант или парсить строку — решать тому, кто будет делать эту задачу. Я ТЗ не видел, точно не знаю, что надо сделать.
Что касается вариантаPHP:
$a = «/catalog//price//»;то идея остается та-же, просто вытаскиваем значения между catalog и price и проверяем на пустоту
PHP:
$a = «/catalog/tovarurl/price/2578/»; // 404 } $str = ‘/catalog/’ . $match[1] . «https://php.ru/»; $c = $match[2];Если, конечно, есть вероятность того, что придет такой урл
@Александр Петрович, регулярка некорректная, можно в ней сразу правила задавать )
