2013-02-02 1 views
0

최초 배열은 전류 값 정의 번째 어레이는 제 배열에 의해 트리거되는 맵이다PHP에서 대체 키와 일치하는 2 개의 배열에서 값을 교환하는 가장 효율적인 방법은 무엇입니까?

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

을 또한 여분 키 길게

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

아이디어는 두 번째이다을 배열 키의 세그먼트는 대체 키를 보유하고 최종 반환 배열은 대체 키의 위치를 ​​나타내는 출력 맵입니다.

최종 원하는 출력은 다음과 같다 : I는 입력 값의 수 및 위치에 교체 키의 번호가 수도에 대한 일반적인 해결책을 찾기 위해 노력하고

/high-wood/students/ 

.

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

이것의 출력 일 것이다 :

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

하고 일반 틱지도 : 여기

은 일반적인 수신 어레이의 예이다

/key-value/anything/ 

기본 아이디어는 map-key가 두 번째 세그먼트에서 발견된다는 것입니다 (어느 곳에서나있을 수 있습니다). 따라서 값은 들어오는 ar에서 가져옵니다. 출력 배열의 맵 키 홀더에 넣습니다.

현재 저는 구토 루프와 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

관련 문제