У меня проблемы с получением URL из списка. Мне нужно вызвать скрипт script.php? Id = 31 и заставить его распечатать правильный итоговый URL http://site.com/page.php?id=31§ion=2 без (url= и ,).
url=
,
Я использую print_r в примере, потому что $url[0] и $url[1] не дали результата.
print_r
$url[0]
$url[1]
Спасибо
<?php $id=$_REQUEST["id"]; $links=" url=http://site.com/page.php?id=22§ion=1, url=http://site.com/page.php?id=10§ion=8, url=http://site.com/page.php?id=31§ion=2, url=http://site.com/page.php?id=15§ion=3, url=http://site.com/page.php?id=16§ion=7, url=http://site.com/page.php?id=12§ion=5, "; preg_match("/url\=(.*?)&id\=$id&(.*?),/is", $links, $url); print_r($url); ?>
$id = $_REQUEST["id"]; $links=" url=http://site.com/page.php?id=22§ion=1, url=http://site.com/page.php?id=10§ion=8, url=http://site.com/page.php?id=31§ion=2, url=http://site.com/page.php?id=31§ion=3, url=http://site.com/page.php?id=16§ion=7, url=http://site.com/page.php?id=12§ion=5, "; preg_match_all('/(url=.*?id='.$id.'&.*?),/im', $links, $result, PREG_PATTERN_ORDER); for($i = 0; $i < count($result[0]); $i++) { $link = preg_replace('/(url=|,)/im', '', $result[1][$i]); echo $link; }
Если предположить, что $ id равно 31, будет выведено:
http://site.com/page.php?id=31§ion=2 http://site.com/page.php?id=31§ion=3
Я бы разделил ваш строковый литерал, чтобы было проще:
$id = 31; preg_match('/url=((?:.*?)[?&]id=' . $id . '&.*),/im', $subject, $regs); echo $regs[1]; // this will be 'http://site.com/page.php?id=$31§ion=3'
Улучшенная версия, поддерживающая url=http://site.com/page.php?id=31, (без & после идентификатора)
url=http://site.com/page.php?id=31,
&
$id = 1; preg_match('/url=((?:.*?)[?&]id=' . $id . '[^0-9](?<![0-9]).*),/im', $subject, $regs) echo $regs[1]; // this will be 'http://site.com/page.php?id=$31§ion=3'
ВАУ, я хотел поставить $regs[1], а не $subject[1], это было глупо: -P
$regs[1]
$subject[1]
Разве /url\=(.*?)&id\=$id&(.*?),/is не должно быть /url\=(.*?)[?&]id\=$id&(.*?),/is? Вы пытаетесь сопоставить что-либо до &id=, хотя в ваших URL есть ?id=.
/url\=(.*?)&id\=$id&(.*?),/is
/url\=(.*?)[?&]id\=$id&(.*?),/is
&id=
?id=
Вы можете сделать это так:
$links=str_replace(',', '', $links); $links=explode(array(',', 'url='), $links); preg_match("/(.*?)&id\=$id&(.*?)/", $links, $url); print_r($url);
Я думаю, что это должно работать.