2014-02-10 1 views
0

I은 ​​다음과 같습니다 배열을 :PHP 다차원 배열 키에 의한 검색 및 반환 부모 키

$array = array(
    53 => array(
     'name' => 'category', 
     'subcats' => array(
      42 => array(
       'name' => 'subcategory', 
      ), 
      152 => array(
       'name' => 'subcategory', 
       'subcats' => array(
        431 => array(
         'name' => 'subsubcategory' 
        ) 
       ) 
      ) 
     ) 
    ), 
    94 => array(
     'name' => 'category' 
    ), 
    12 => array(
     'name' => 'category', 
     'subcats' => array(
      67 => array(
       'name' => 'subcategory', 
      ), 
      237 => array(
       'name' => 'subcategory', 
      ), 
      109 => array(
       'name' => 'subcategory', 
      ), 
      32 => array(
       'name' => 'subcategory', 
     ) 
    ) 
); 

당신은 키는 숫자입니다 볼 수 있지만 사람들은 무한히 서로 중첩 될 수 카테고리의 ID는 다음으로 . 내가 필요한 것은이 배열에서 특정 ID를 검색하고 그 배열과 그 부모를 반환하는 것입니다. 키가 서브 카테고리 배열에서도 중복되지 않는다고 가정 할 수 있습니다 - 이것은 MySQL AI 필드의 ID입니다.

그래서 키 (431)를 검색하기위한 예상 된 결과는 다음과 같습니다

어떤 도움이, 난 그냥이 주위에 내 머리를 정리하고 수 없습니다 주시면 감사하겠습니다
array(53, 152, 431); 

)

+0

재귀 트래 버핑의 문제점은 무엇입니까? 너 해봤 니? –

+0

@Rikesh 예 it'a 중복, 미안 해요. 나는 대답을 찾았지만, 결과로 나오지 않았다. / – wilku

답변

1

이 작동 -

function find_id_list($array, $key){ 
    if(in_array($key,array_keys($array))){ 
     return Array($key); 
    } 
    foreach($array as $k=>$v){ 
     if(in_array("subcats",array_keys($v))){ 
      $result = find_id_list($v["subcats"], $key); 
      if ($result !== null){ 
       array_unshift($result,$k); 
       return $result; 
      } 
     } 
    } 
    return null; 
} 

출력 :

$val = find_id_list($array, 431); 
var_dump($val); 
/* OUTPUT 
    array 
     0 => int 53 
     1 => int 152 
     2 => int 431 
*/ 

$val = find_id_list($array, 109); 
var_dump($val); 
/* OUTPUT 
    array 
     0 => int 12 
     1 => int 109 
*/ 

$val = find_id_list($array, 0); 
var_dump($val); 
/* OUTPUT 
    null 
*/ 
0

재귀 함수를 사용하여이 문제를 해결할 수 있습니다.

function searchmulti($arr, $num) 
{ 
    if (!isset($arr[$num])) { 
     foreach ($arr as $key => $subarr) 
     { 
      if (isset($subarr['subcats'])) 
      { 
       $ret = searchmulti($subarr['subcats'], $num); 
       if ($ret) 
       { 
        $ret[] = $key; 
        return $ret; 
       } 
      } 
     } 
    } else return array($num); 
    return null; 
} 

$solution = array_reverse(searchmulti($array,431)); 

출력

$ 용액 => 어레이 (53152431);