0

第一个数组定义当前值:

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/

基本思想是在第二个段(它可以在任何地方)检测到映射键,以便从传入数组中获取值并将其放入输出数组的映射键持有者中。

目前我已经设法制作了一个 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 回答