2009-08-01 10 views
1

Ich habe eine zwei assoziativen arrayes und ich möchte, wennWie überprüft man, ob ein bestimmter Teil des Arrays in einem anderen Array existiert?

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

Die Werte, den „Weg“ gerade keine Rolle spielt überprüfen. Funktioniert array_ intersect_ assoc was ich brauche?
Wenn nicht wie kann ich selbst schreiben?

+1

Warum Sie es nicht versuchen? –

+0

Woher weißt du, dass du den Pfad ["foo"] ["bar"] ["baz"] suchst? Woher bekommst du die Informationen? –

+0

Ich bekomme die Eingabe von der URI. –

Antwort

4

Try this:

<?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

Ich werde es morgen testen. Wenn es funktioniert kann ich Ihnen in meinem Code gutschreiben? –

+0

Ein Link zu dieser Frage wird - verbreiten Sie das Wort! (Angenommen, es tut, was Sie wollen ...) –

+0

funktioniert mit einer kleinen Änderung: Ich benutze diese preg_match_all ('([\ w .-] +)', $ _SERVER ['REQUEST_URI'], $ Pfade); anstatt zu explodieren, da es nicht in das Array passt, das ich brauche. Danke. –

0

Wenn Sie nur überprüfen müssen, ob die Schlüssel vorhanden sind, können Sie eine einfache if-Anweisung verwenden.

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

)) {// existiert }

+0

Das funktioniert, wenn ich die Tiefe kenne, die ich überprüfen muss. Es kann auch sein Array1 ["baz"] ["bar"] existiert in Array2 ["baz"] ["bar"], wenn es einen anderen Eingang gibt. –

Verwandte Themen