2010-07-02 4 views
0

나는이 질문에 비슷한 질문을 올렸지 만 지금은 다르므로 중복으로 닫지 마십시오.PHP : 다차원 배열에서 동적으로 키 위치 찾기

나는 다차원 배열을 가지고 있습니다. 주어진 배열 키 (모든 배열 키는 문자열)의 위치를 ​​찾고 배열의 키 위치를 배열로 반환하는 함수가 필요합니다.

 
$arr = array 
(
    'fruit' => array(
     'apples' => array(), 
     'oranges' => array(), 
     'bananas' => array() 
    ), 
    'vegetables' => array(
     'tomatoes' => array(), 
     'carrots' => array(), 
     'celery' => array(), 
     'beets' => array 
     (
      'bears' => array(), 
      'battlestar-galactica' => array() 
     ), 
    ), 
    'meat' => array(), 
    'other' => array() 
); 

함수 가변 인자/동적 번호 (즉, 선택적 인수)을 가져야한다 :

여기 예시적인 배열이다. 인수는 내 배열의 "수준"(차원)을 나타냅니다.

기능이 하나 개의 인자로 호출 될 경우, 함수는 상기 어레이의 첫번째 레벨/치수에 키 찾아야한다 (즉, 그것들은 예에서는 'fruit', 'vegetables', 'meat''other' 것).
두 개의 인수 (예 : theFunction('vegetables', 'beets')이면 'vegetables'이라는 키를 찾아 이라는 하위 키를 찾아야합니다 ('vegetables' 수준/분기/차원에만 해당)!이 예에서는 array(1, 3)을 반환합니다.

물론 이것은 레벨/치수의 수에 관계없이 작동해야합니다.

+2

당신이 이미 알고있는 열쇠를 사용하지 않는 이유는 무엇입니까? 좋아요 $ arr [ 'vegelatbles'] [ 'beets']; 이것은 $ arr [1] [3]과 동일합니다. – JochenJung

+3

당신은 $ arr [ 'secondkey']! = $ arr [1]'... – fbstj

+2

을 깨닫습니다. $ Arr [1] [3]은 $ arr [ 'vegelatbles'] [ 'beets ']; – Gordon

답변

0
function find($arr, $k1, $k2=null){ 
    if(!array_key_exists($k1, $arr)) //array level one only 
     if(array_key_exists($k1, $arr)) 
      ; 
     else 
      ; 
    else if(array_key_exists($k2, $arr[$k1])) 
     ; 
    else 
     ; 
} 
1

나는이 질문이 어떤 시간 동안 사랑을 갖지 않았 음을 알기 때문에 나는 그것에 대해 이야기 할 것이다.

function findKey($srcArray , $fndArray , $depth=0){ 
    if(($keyIndex[] = array_search($fndArray[$depth] , array_keys($srcArray)))!==false){ 
    if(is_array($srcArray[$fndArray[$depth]])) 
     $nextLevel = findKey($srcArray[$fndArray[$depth]] , $fndArray , $depth+1); 
    if($nextLevel===false) 
     return $keyIndex; 
    return array_merge($keyIndex , $nextLevel); 
    } 
    return false; 
} 

이 기능은 제공된 테스트 데이터를 사용 array(1 , 3)의 배열을 반환한다. 매치가 진행될 때까지 일치하는 배열을 제공합니다 (즉, 3 중에서 처음 2 개 항목과 일치 할 수있는 경우 반환 된 배열은 처음 2 개의 숫자를 갖습니다).

관련 문제