2010-03-06 9 views
0

Le premier tableau s'appelle $ related_docs et le second est $ all_docs. J'essaie de faire correspondre la valeur "1" dans le premier tableau avec la valeur "1" dans le deuxième tableau.php in_array() ne correspond pas

Array 
(
    [0] => 1 
) 
Array 
(
    [0] => Array 
     (
      [id] => 1 
      [type_name] => bla1 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [type_name] => bla2 
     ) 

    [2] => Array 
     (
      [id] => 3 
      [type_name] => bla3 
     ) 
    ) 

Je suis en train de voir si toutes les valeurs du premier tableau se produisent dans le second tableau, ce qu'il fait, mais le script imprime rien, mais « non ». Pourquoi donc? J'ai essayé de changer $ all_docs dans l'instruction if() en $ a mais cela ne fait aucune différence.

foreach($all_docs as $a) 
    { 
    if(in_array($related_docs, $all_docs)) 
    { 
    print "yes"; 
    } 
    else print "no"; 
    } 

Ai-je besoin de rechercher récursivement dans le second tableau?

Répondre

2

Vous essayez de faire une recherche récursive, ce que in_array() ne peut pas faire. Il ne peut que correspondre très primitivement au premier niveau du tableau que vous recherchez.

Peut-être que this implementation d'un récursif in_array() fonctionne pour ce dont vous avez besoin.

Vous pouvez également utiliser quelque chose le long des lignes de:

function id_exists ($search_array, $id) 
{ 
    foreach ($search_array as $doc) 
    if ($doc["id"] == $id) return true; 

    else return false; 

} 

foreach($all_docs as $a) 
    { 
    if( id_exists($related_docs, $a)) 
    { 
    print "yes"; 
    } 
    else print "no"; 
    } 
+0

Merci pour la suggestion, mais cette fonction de recherche récursive ne fonctionne pas non plus. – stef

+1

@stef Je pense que la meilleure chose est pour vous d'écrire une fonction personnalisée qui boucle à travers $ $ all_docs' et renvoie vrai si '$ all_docs [i] [" id "] == $ search_id'. –

+0

@stef voir ma réponse mise à jour. –

1

Essayez

$a = array(1); 
$b = array(
    array('id' => 1, 'type_name' => 'bla1'), 
    array('id' => 2, 'type_name' => 'bla2'), 
    array('id' => 3, 'type_name' => 'bla3'), 
); 

vérification ID $ b existe dans un $, il est donc l'inverse que vous l'avez décrit, mais il ne devrait pas importer pour le résultat:

foreach($b as $c) { 
    echo in_array($c['id'], $a) ? 'yes' : 'no'; 
} 

Ce n'est pas générique, mais il fait ce que vous voulez.

+0

Et le downvote est pour * quoi *? – Gordon

+1

Aucune idée alors je vous ai mis à jour. On dirait une solution propre à moi. –

2
function in_array_multiple(array $needles, array $haystacks) { 
foreach($haystacks as $haystack) { 
    foreach($needles as $needle) { 
     if(in_array($needle, $haystack)) { 
      return true; 
     } 
    } 
} 
return false; 
} 

(Ceci est une fonction itérative, pas récursive.)

Questions connexes