2009-08-01 4 views
1

J'ai un deux arrayes associatifs et je veux vérifier siComment vérifier si une certaine partie du tableau existe dans un autre tableau?

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

Les valeurs n'a pas d'importance, juste le « chemin ». Est-ce que array_ intersect_ assoc fait ce dont j'ai besoin?
Si non, comment puis-je en écrire un moi-même?

+1

Pourquoi essayez-vous pas? –

+0

Comment savez-vous que vous recherchez le chemin ["foo"] ["bar"] ["baz"]? D'où obtenez-vous l'information? –

+0

Je reçois l'entrée de l'URI. –

Répondre

4

Essayez ceci:

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

Je vais le tester demain. Si cela fonctionne, puis-je vous créditer dans mon code? –

+0

Un lien vers cette question va faire passer le mot! (En supposant qu'il fasse ce que vous voulez ...) –

+0

fonctionne avec un changement mineur: J'utilise ce preg_match_all ('([\ w .-] +)', $ _SERVER ['REQUEST_URI'], $ paths); au lieu d'exploser car il ne correspond pas au tableau dont j'ai besoin. Merci. –

0

Si vous avez seulement besoin de vérifier si les clés existent, vous pouvez utiliser une simple instruction if.

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

)) {// EXISTE }

+0

Cela fonctionne si je connais la profondeur que j'ai besoin de vérifier. Il peut aussi être array1 ["baz"] ["bar"] existe dans array2 ["baz"] ["bar"] s'il y a une entrée différente. –