0

最初の配列は、現在の値を定義します。

Array ( [0] => schools [1] => high-wood [2] => students ) 

2 番目の配列は、最初の配列によってトリガーされ、置換キーも保持するマップです。

Array ( [/schools/{school-name}/students/] => /{school-name}/students/ ) 

アイデアは、配列キーの 2 番目のセグメントが置換キーを保持し、最終的に返される配列が置換キーの場所を示す出力マップであるということです。

最終的に必要な出力は次のようになります。

/high-wood/students/

これに対する一般的な解決策を見つけようとしています。これには、任意の数の入力値と、任意の位置に任意の数の置換キーがある可能性があります。

一般的な着信配列の例を次に示します。

Array ( [0] => param1 [1] => param2 [2] => key-value ) 

そして一般的なマップ:

Array ( [/param1/param2/{key-map}/] => /{map-key}/anything/ ) 

これの出力は次のようになります。

/key-value/anything/

基本的な考え方は、マップ キーが 2 番目のセグメント (どこにでもある可能性があります) で検出されるため、値が入力配列から取得され、出力配列のマップ キー ホルダーに入れられるというものです。

現在、私は foreach ループと preg_matches の vomitus 配列を作成することができましたが、それらを提示するだけでも問題がさらに混乱するのではないかと心配しています。

4

1 に答える 1

0

う~ん・・・こんなものはいかがでしょう。未テスト:

$input  = array('schools', 'high-wood', 'students');

// Here I'm making the blithe assumption that you can further tweak the URI map
$uriMap = array('^/schools/([^/]+)/students/$' => '/{school-name}/students/');
//               ^         ^^^^^^^          ^
//             anchor    capturing group   anchor

// Massage input to match format of $uriMap
$inUri  = '/'.implode('/', $input).'/';

foreach($uriMap as $pattern => $target){
    if(false !== preg_match($pattern, $inUri, $matches){
        // $matches[1] should have the matched string
        $mapped = str_replace('{school-name}', $matches[1], $target);
        break;
    }
}

echo $mapped;

/ハイウッド/学生/

乾杯

于 2013-02-02T00:30:41.333 に答える