2009-08-01 9 views
1

나는이 연관 arrayes을하고 난 값은 단지 "경로"를 중요하지 않습니다배열의 특정 부분이 다른 배열에 있는지 확인하는 방법은 무엇입니까?

$array1["foo"]["bar"]["baz"] exists in $array2["foo"]["bar"]["baz"] 

있는지 확인하고 싶습니다. array_ intersect_ assoc은 내가 필요한 것을 처리합니까?
만약 내가 어떻게 자신을 쓸 수 있습니까?

+1

당신이 그것을 왜 시도하지 않는를? –

+0

경로 [ "foo"] [ "bar"] [ "baz"]를 찾고 있음을 어떻게 알 수 있습니까? 어디에서 정보를 얻습니까? –

+0

URI에서 입력을받습니다. –

답변

4

이 시도 :

<?php 
function array_path_exists(&$array, $path, $separator = '/') 
{ 
    $a =& $array; 
    $paths = explode($separator, $path); 
    $i = 0; 
    foreach ($paths as $p) { 
     if (isset($a[$p])) { 
      if ($i == count($paths) - 1) { 
       return TRUE; 
      } 
      elseif(is_array($a[$p])) { 
       $a =& $a[$p]; 
      } 
      else { 
       return FALSE; 
      } 
     } 
     else { 
      return FALSE; 
     } 
     $i++; 
    } 
} 

// Test 
$test = array(
    'foo' => array(
     'bar' => array(
      'baz' => 1 
      ) 
     ), 
    'bar' => 1 
    ); 

echo array_path_exists($test, 'foo/bar/baz'); 

?> 
+0

나는 그것을 내일 시험 할 것이다. 작동하는 경우 내 코드에 신용 할 수 있습니까? –

+0

이 질문에 대한 링크가 도움이 될 것입니다. (당신이 원하는 것을 가정하면 ...) –

+0

은 사소한 변경으로 작동합니다 :이 preg_match_all ('([\ w .-] +)', $ _SERVER [ 'REQUEST_URI'], $ paths); 내가 필요로하는 배열에 맞지 않기 때문에 폭발하는 대신에. 감사합니다. . –

0

키가 있는지 확인하기 만하면 간단한 if 문을 사용할 수 있습니다.

<?php 
if (isset($array1["foo"]["bar"]["baz"]) && isset($array2["foo"]["bar"]["baz"] 

)) { // 존재}

+0

내가 확인할 필요가있는 깊이를 알고 있으면 효과가있다. 다른 입력이 있으면 array2 [ "baz"] [ "bar"]에 array1 [ "baz"] [ "bar"]이 존재할 수도 있습니다. –

관련 문제