$a="/catalog/tovarurl/price/2578/"; как вырезать ту часть что содержит /price/xxx/, где xxx - произвольный набор знаков и символов т.е по итогу хочу получить переменную $b="/catalog/tovarurl/"; т.е вырезать хвост из переменной включая /price/2578/ и создать переменную $c которая содержит значение xxx в данном случае 2578
нет имен в php сделать к url это не относится в конкретном примере. с концом $c уже разобрался а вот как получить из $a="/catalog/tovarurl/price/2578/"; $b="/catalog/tovarurl/"; т.е отрезать /price/2578/ это вот не получается где 2578 может быть любое число
я так понял что 17 это номер символа от начала? но тут условие еще есть вот тут $a="/catalog/tovarurl/price/2578/"; tovarurl может быть тоже любой длины и вида вот частный пример вот тут $a="/catalog/aaaaxxxxssx/yydyd/price/2578/"; т.е как то привязку нужно сделать к слову /price/ и удалить его и все что после него из строки $a="/catalog/aaaaxxxxssx/yydyd/price/2578/";
PHP: <?php function getUrlParams($route){ $params = explode("/", $route); array_shift($params); array_pop($params); $url = "/"; $c = end($params); foreach($params as $param){ if($param === 'price'){ break; } $url = $url . $param . '/'; } 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/"; print_r(getUrlParams($route)); print_r(getUrlParams($route2)); print_r(getUrlParams($route3)); print_r(getUrlParams($route4)); Результат Код (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) { // Разбиваем строку на части по разделителю "/" $parts = explode('/', $url); // Ищем индекс элемента "price" $priceIndex = array_search('price', $parts); // Если элемент "price" найден, удаляем его и все элементы, идущие после него if ($priceIndex !== false) { array_splice($parts, $priceIndex); } // Объединяем оставшиеся элементы в новую строку и возвращаем ее $newUrl = implode('/', $parts); // Извлекаем значение параметра "price" из исходной строки $price = null; preg_match('/\/price\/(.+?)\//', $url, $matches); if (count($matches) === 2) { $price = $matches[1]; } // Возвращаем результат в виде массива return array( 'url' => $newUrl, 'price' => $price ); } Мне мой способ больше нравится, его проще читать.
PHP: $a = "/catalog/tovarurl/price/2578/"; $sub = mb_strrchr($a, 'price'); // 'price/2578/' $b = str_replace($sub, '', $a); // '/catalog/tovarurl/' $t = str_replace('price/', '', $sub); // '2578/' $c = mb_substr($t, 0, mb_strpos($t, '/')); // '2578'
PHP: $a = "/catalog/tovarurl/price/2578/"; preg_match('#(/catalog/[a-z]*/)price/([0-9]*)/#', $a, $match); $str = $match[1]; $c = $match[2];
Хотя да, правильней будет такой вариант PHP: $a = "/catalog/tovarurl/price/2578/"; preg_match('#(/catalog/.*/)price/([0-9]*)/#', $a, $match); $str = $match[1]; $c = $match[2];
Спасибо за объяснения, теперь стало все понятно. Добавлю от себя разъяснения. Мое решение - это не истина в конечной инстанции. Я просто подкинул идею. Идея заключается в том, что можно регуляркой вытащить из строки то, что необходимо. Использовать мой вариант или парсить строку - решать тому, кто будет делать эту задачу. Я ТЗ не видел, точно не знаю, что надо сделать. Что касается варианта PHP: $a = "/catalog//price//"; то идея остается та-же, просто вытаскиваем значения между catalog и price и проверяем на пустоту PHP: $a = "/catalog/tovarurl/price/2578/"; preg_match('#/catalog/(.*)/price/(.*)/#', $a, $match); if (empty($match[1]) || empty($match[2])) { // 404 } $str = '/catalog/' . $match[1] . '/'; $c = $match[2]; Если, конечно, есть вероятность того, что придет такой урл