1

URLを整理しようとしています。「.php?slug=[some+text]」で終わるファイルを見つけて「/[some+text]」に置き換える mod_rewrite があります。ただし、それでは、見た目が乱雑になることなく、URL に複数の変数を格納することはできません。

次のような URL を取る php スクリプトを作成しようとしました。

.php?slug=search/this+is+a+search/tags/php+sql/page/2

それを置き換える必要があります

array(
   'search'->'this is a search',
   'tags'->'php sql',
   'page'->2
);

私はここまで来ました。

if(isset($_GET['slug'])&&$_GET['slug']!=''){
$url=$_GET['slug'];
$params=explode(DIRECTORY_SEPARATOR,$url);
print_r($params);
}

これは以下を返します:

Array ( 
  [0] => search
  [1] => this is a search
  [2] => tags 
  [3] => php sql 
  [4] => page 
  [5] => 2 
) 

それを一番上の配列に変換するにはどうすればよいですか?これを行うより良い方法はありますか?

遊んだ後に見つけた1つの方法は次のとおりです。

if(isset($_GET['slug'])&&$_GET['slug']!=''){
    $url=$_GET['slug'];
    $params=explode(DIRECTORY_SEPARATOR,$url);
    $out=array();
    $array_size = count($params);
    for($i = 0; $i < $array_size; $i+=2)
    {
        $key=$params[$i];
        $value=$params[$i+1];
        $out[$key]=$value;
    }
    print_r($out);

}

この種の作品。

4

3 に答える 3

1

これはそれを行います:

$params = array_combine(array_map(function($a) {return $a[0];},$tmp = array_chunk($params,2)),array_map(function($a) {return $a[1];},$tmp));

一発ギャグ!

実際には何も達成していないことに注意してください。比較:

somefile.php?search=some+text&tags=php+sel&page=2
somefile/search/some+text/tags/php+sel/page/2

拡張機能を削除する以外に、何も得られません。複雑な文字列を解析する必要があるため、自分自身を難しくしているだけです。

于 2012-06-13T17:13:30.340 に答える
1

おそらく、すべての作業を .htaccess ファイルで行うでしょう。

RewriteRule    ^([A-Za-z0-9]+)/?$    index.php?search=$1    [QSA]
RewriteRule    ^([A-Za-z0-9]+)/([A-Za-z0-9]+)/?$    index.php?search=$1&tags=$2    [QSA]
RewriteRule    ^([A-Za-z0-9]+)/([A-Za-z0-9]+)/([0-9]+)/?$    index.php?search=$1&tags=$2&page=$3    [QSA]

次に、次のようにそれぞれにアクセスするだけです。

<?php
$search = $_GET['search'];
$tags = $_GET['tags'];
$page = $_GET['page'];
?>

注: [QSA] は、きれいな URL 変数の後にまだ乱雑な URL 変数を使用できることを意味します。これは、ブール値または ID を渡したいが、乱雑に見えてもかまわない場合に便利です。

これは実際にはあなたが尋ねた質問ではないことはわかっていますが、この方法で簡単にわかるかもしれません.

于 2012-06-13T17:05:49.643 に答える
0

/配列キーの最初の値を使用して文字列を分割できます。

//$url = $_SERVER['REQUEST_URI'];
//$url = $_GET['slug'];
$url = 'search/this+is+a+search/tags/php+sql/page/2';

preg_match_all('~([^/]+)/([^/]+)~', $url, $matches, PREG_SET_ORDER);

$values = array();
foreach($matches as $match)
{
    $values[$match[1]] = $match[2];
}

print_r($values);
于 2012-06-13T17:17:15.227 に答える