2017-02-08 12 views
2

私はスラッシュで区切られたパスを持っています。これは、「アカウント」、パスの最後の言葉をつかむだろうスプリットアレイで特定の単語の後に単語を取得しますか?

/user/john/account 

$uri = getenv('REQUEST_URI'); 
$uri = explode('/', $uri); 
$uri = array_filter($uri); 
$uri = array_merge($uri, array()); 

パスは次のように終わるでしょう。

$uri = end($uri); 

「user」の後に最初に見つかった単語を変数にするにはどうすればよいですか?

この場合、「john」になりますが、名前は新しいURIごとに変更できます。

「user」は常に同じ単語のままです。 ます。また、 '(パターンをpreg_splitを使用することができます。あなたもスラッシュ

EDITの後に最後の要素を得ることができる。これにより

$uriArray = explode('/',$uri); //$uriArray[0] = 'user' //$uriArray[1] = 'john' 

$name = $uriArray[1]; 

:$ URI =エンド($ URI)の前に

+0

URLの書き換えを使用している場合は、分割する必要はありません。 http://stackoverflow.com/questions/16388959/url-rewriting-with-php – Noman

答えて

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; 

で何が必要です。注:「ユーザーは」array_searchで固定された用語である..あなたは

+0

こんにちは、私はあなたのソリューションを実装しようとしています。1つの小さな問題が見つかりました。パスが "/ user"でなくても "john"でなく、$ key + 1であればエラーになります。 –

+0

申し訳ありませんが私の間違い..常に配列キーが存在するかどうかを確認することは良いです –

+0

それは今テスト中です。ページのセットアップにはしばらく時間がかかりますが、私はあなたに連絡して回答を受け入れます。ありがとう。 –

1

はこれを追加します'、$ string):

$name = preg_split('user/',$uri); 

$ nameは "john/account"です。その後、配列にそれを保存し、再び爆発使い、要素0は、ここで名前

+0

私は実際にこれを使用していましたが、それは位置を選択しますが、特定の単語の後に必要です。それはまだ役に立ちます、ありがとうございます。 –

+0

代替ソリューションが追加されました。これはおそらく役に立ちます – bloodscript

2
それを変更することができます

編集:使用し、それはあなたがURI-アレイの位置が単語userが含まれていwhitch見つけ出し、このための関数を書くことができます。この問題

を解決するためのより良い方法であると、その後すべき次の位置を返し答えるM A SIDDIQUIs名前が含まれています。

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"); 
+0

ありがとう、多くの良い答え。それらを試してみましょう。 –

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; 
} 
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]; 
} 

が問題を解決します。

+0

これはうまく動作しますが、/ user /が含まれていないページでも実行するとエラーになります。その周りに道がありますか? –

+0

@MattMcManis私の編集した例を見てください。 –

+0

これはM A SIDDIQUIのソリューションよりもリソースがどれくらい速いか軽いかと思いますか? http://stackoverflow.com/a/42110367/6806643 –

関連する問題