我有一条用正斜杠分隔的路径。
$uri = getenv('REQUEST_URI');
$uri = explode('/', $uri);
$uri = array_filter($uri);
$uri = array_merge($uri, array());
路径最终会像:
/user/john/account
这将获取路径中的最后一个单词“account”。
$uri = end($uri);
如何将'user'后的第一个单词变为变量?
在这种情况下,它将是'john',但名称可以在每个新URI上更改。
'用户'始终保持同一个字。
答案 0 :(得分:3)
$uri = "/user/john/account";
$uri_array = explode("/", $uri);
$key = array_search("user", $uri_array);
$desired_value = array_key_exists($key+1, $uri_array) ? $uri_array[$key+1] : "error";
echo $desired_value;
以下是您需要的:注意:“user”是array_search中的固定术语..您可以更改它
答案 1 :(得分:1)
在$ uri = end($ uri)之前添加:
$uriArray = explode('/',$uri); //$uriArray[0] = 'user' //$uriArray[1] = 'john'
$name = $uriArray[1];
通过这个你也可以得到斜杠之后的最后一个元素
编辑: 你也可以像这样使用preg_split('pattern',$ string):
$name = preg_split('user/',$uri);
$ name将是“john / account”。然后再次使用explode将其保存到数组中,元素0是名称
答案 2 :(得分:1)
修改:使用M A SIDDIQUIs
回答这是解决此问题的更好方法
您可以为此编写一个函数,找出uri-Array的whitch位置包含单词user
,然后返回应包含该名称的下一个位置。
function getName($uri)
{
$uri = explode('/', $uri);
for($i = 0; $i < sizeof($uri); $i++){
if($uri[$i] == "user"){
return $uri[$i+1];
}
}
}
然后你只需要打印出来:
echo getName("exmaple/user/username/etc");
答案 3 :(得分:1)
您可以使用此
$uri='/user/john/account';
$from1 ='/user/';
$to1 ='/';
//$uri = explode('/', $uri);
echo get_string_between($uri,$from1,$to1);
function get_string_between ($str,$from,$to) {
$string = substr($str, strpos($str, $from) + strlen($from));
if (strstr ($string,$to,TRUE) != FALSE) {
$string = strstr ($string,$to,TRUE);
}
return $string;
}
答案 4 :(得分:1)
preg_match
可能会更有效:
Psy Shell v0.8.1 (PHP 7.1.1-1+deb.sury.org~xenial+1 — cli) by Justin Hileman
>>> preg_match('~/user/([^/]+)/?~', '/test/user/username/tuedelue', $matches);
=> 1
>>> $matches;
=> [
"/user/username/",
"username",
]
>>> $matches[1];
=> "username"
>>> |
所以这些行
$user = 'unknown';
if (preg_match('~/user/([^/]+)/?~', getenv('REQUEST_URI'), $matches)) {
$user = $matches[1];
}
可以解决您的问题。