Имеется строка: Код (Text): https://www.somehost.com/test/index.htmlparam1=4¶m2=3¶m3=2¶m4=1¶m5=3 Напишите функцию, которая: удалит параметры со значением “3”; отсортирует параметры по значению; добавит параметр url со значением из переданной ссылки без параметров (в примере: /test/index.html); сформирует и вернёт валидный URL на корень указанного в ссылке хоста. В указанном примере функцией должно быть возвращено: Код (Text): https://www.somehost.com/?param4=1¶m3=2¶m1=4&url=%2Ftest%2Findex.htm ///////////////////////////////////////////////////////////////////////////////////////////////////// Нормальное ли решение или лучше использовать регулярки? PHP: <?php $url = 'https://www.somehost.com/test/index.html?param1=4¶m2=3¶m3=2¶m4=1¶m5=3'; $addUrl = '/test/index.html'; function shapingUrl($url, $delParam, $addUrl){ $arr = explode('&', substr(mb_stristr($url, '?'), 1)); $resultParam = []; foreach($arr as $k => $v) { $param = explode('=', $v); if($param[1] != $delParam) { $resultParam[$param[0]] = $param[1]; } } asort($resultParam); $pos = strpos($url, '/', 10); $newStr = ''; $newStr = http_build_query($resultParam, '', '&'); return substr($url, 0, $pos) . '/?' . $newStr . '&url='.urlencode($addUrl); } echo shapingUrl($url, 3, $addUrl);
PHP: <?php $url_str = "https://www.somehost.com/test/index.html?param1=4¶m2=3¶m3=2¶m4=1¶m5=3"; $query = parse_url($url_str, PHP_URL_QUERY); parse_str($query, $output); echo "<pre>"; print_r($output); echo "</pre>"; ?> Кроме этого у тебя URL неверный, там нужен еще знак вопроса. Ты его потерял (в самой верхней строке) Так что думаю ты именно этой функцией parse_url() сможешь разобрать и обратно собрать URL как тебе будет угодно