2013-02-02 51 views
0

第一陣列限定的當前值:什麼是最有效的方法來交換2個數組中匹配PHP替換鍵的值?

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

的第二陣列是受第一陣列觸發的地圖,並且還保持更換鍵:

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

的想法是,在第二數組鍵的段保存替換鍵,並且最終返回的數組是指示替換鍵的位置的輸出映射。

最終所需的輸出然後將:

/high-wood/students/ 

我試圖找到一個通用的解決這個可以有任意數量的傳入值,並且在任何位置的任何數量的更換密鑰。

這裏是通用的傳入陣列的例子:

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

和通用上下的地圖:

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

這樣做的輸出將是:

/key-value/anything/ 

的基本思想是在第二段(它可能在任何地方)檢測到map-key,以便從進入的ar取得值並將其放入輸出數組的映射鍵保持器中。

目前我已經設法做一個foreach循環和preg_matches嘔吐數組,我害怕即使提出這些會進一步混淆問題。

回答

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; 

/高木材/生/

乾杯

+0

非常感謝你這一點。我擴展了我原來的問題,所以更清楚的是數組都將是通用的。 – sterling

相關問題