2010-11-20 6 views
1

다음 함수는 배열에 값이 있는지 없는지를 알려줍니다.array_search_recursive() .. 다차원 배열에 값이있는 곳을 찾도록 도와주세요.

function array_search_recursive($needle, $haystack) { 
    foreach ($haystack as $value) { 
     if (is_array($value) && array_search_recursive($needle, $value)) return true; 
     else if ($value == $needle) return true; 
    } 
    return false; 
} 

하지만 값이 배열에서 끝나는 배열 인덱스 번호를 원합니다.

+0

필자는 PHP를 잘 모르지만 PHP가있는 경우 표준을 수행해야 항상 색인을 가질 수 있다고 생각합니다. 그러나 그런 식으로조차도 당신이 원하는 것이면 최종 배열이 아니라 최고 배열을 얻습니다. – MPelletier

답변

0

참조로 전달 된 세 번째 매개 변수를 추가하여 함수를 수정했습니다.

바늘이 발견되면이 함수는 true를 반환합니다. 또한 $ 인덱스는 발견 된 값에 대한 인덱스의 배열입니다.

function array_search_recursive($needle, $haystack, &$indexes=array()) 
{ 
    foreach ($haystack as $key => $value) { 
     if (is_array($value)) { 
      $indexes[] = $key; 
      $status = array_search_recursive($needle, $value, $indexes); 
      if ($status) { 
       return true; 
      } else { 
       $indexes = array(); 
      } 
     } else if ($value == $needle) { 
      $indexes[] = $key; 
      return true; 
     } 
    } 
    return false; 
} 

예 :

$haystack1 = array(
    0 => 'Sample 1', 
    1 => 'Sample 2', 
    2 => array(
     'Key' => 'Sample 3', 
     1 => array(
      0 => 'Sample 4', 
      1 => 'Sample 5' 
     ) 
    ), 
    4 => 'Sample 6', 
    3 => array(
     0 => 'Sample 7' 
     ), 
); 

인덱스를 "샘플 5"들은 [2] [1] [1].

관련 문제