3

ページに来る URL は次のようになります。

"http://localhost/testSite/id/1/friend_id/32/msg_id/5/category_id/40"

これらの変数 ( id/1friend_id/32msg_id/5など) を削除して、次のような配列にしたいと思います。

$params = array('id' => 1, 'friend_id' => 32, 'msg_id' => 5, 'category_id' => 40)

次のようにこれらの値にアクセスできるようにします。

$params['id']; $params['friend_id'];

次のコードでどこかに到達していると思いましたが、あまり役に立ちません。

    $keys = explode('/', $url);
    $k2 = $keys;
    $result = array();

    foreach ($keys as $k => $v) {
       $result[$v] = next($k2); 
    }
    array_pop($result);
    print_r($result);

上記のコードから次の出力が得られます。

Array
(
    [id] => 1
    [1] => friend_id
    [friend_id] => 32
    [32] => msg_id
    [msg_id] => 5
    [5] => category_id
    [category_id] => 40
)

誰もこれを以前にやったことがありますか?上記のコードを修正して正しく動作させるにはどうすればよいですか? または、これを行う方法について他のアイデアを持っている人はいますか?

助けていただければ幸いです、ありがとう!

4

2 に答える 2

2

これがフレームワークによって行われる場合、パラメーターを取得する方法が必要です。その場合はドキュメントを参照してください。

それ以外の場合は、単純な正規表現を使用して解析できます。$rootアイデアは、プレフィックス(コード内)を定義することです。

$url = 'http://localhost/testSite/id/1/friend_id/32/msg_id/5/category_id/40';
$root = 'http://localhost/testSite/';
$params =  substr($url, strlen($root));
preg_match_all("#([^/]+)/([^/]+)#", $params, $match);
$result = array_combine($match[1], $match[2]);
于 2012-12-09T00:39:28.033 に答える
0
$parts = explode('/', $url);
$len = count($parts);
$result = array();
for ($i = 0; $i < $len; $i+=2) {
  $result[$parts[$i]] = $parts[$i+1];
}
于 2012-12-09T00:52:05.950 に答える