2011-10-30 3 views
0

Ce que j'essaie de faire est vraiment mais je vais dans beaucoup de détails pour s'assurer qu'il est facilement compréhensible. J'ai un tableau qui a quelques chaînes. J'en ai alors un autre qui a peu d'autres cordes courtes en général un ou deux mots.Comparer Toutes les chaînes dans un tableau à toutes les chaînes dans un autre tableau, PHP

Je en ai besoin pour que si mon application trouve l'un des mots de la chaîne dans le second tableau, dans l'une des premières chaînes de tableaux, il passera à l'action suivante. Par exemple, si l'une des chaînes du premier tableau est "Ceci est le code PHP" et que l'une des chaînes dans la seconde est "PHP". Ensuite, elle trouve une correspondance qu'elle passe à l'action suivante. Je peux le faire en utilisant ce code:

for ($i = 0; $i < count($Array); $i++) { 
    $Arrays = strpos($Array[$i],$SecondArray[$i]); 

    if ($Arrays === false) { 

     echo 'Not Found Array String'; 

    } 
    else { 
     echo 'Found Array String'; 

Toutefois, ce ne compare que l'objet du premier tableau à l'index courant dans la boucle avec le second tableau des objets index courant dans la boucle. Je ai besoin de comparer toutes les valeurs dans le tableau, de sorte qu'il recherche toutes les valeurs dans le premier tableau pour la première valeur dans le deuxième tableau, puis toutes les valeurs dans le premier tableau pour la deuxième valeur dans le deuxième tableau etc.

Je pense que je dois faire deux boucles? J'ai essayé ceci mais ai eu des problèmes avec le tableau retournant seulement la première valeur.

Si quelqu'un pouvait aider ce serait apprécié! Ill marquer la bonne réponse et + 1 des commentaires utiles!

Merci!

Répondre

2

Peut-être que ce qui suit est une solution:

// loop through array1 
foreach($array1 as $line) { 
    // check if the word is found 
    $word_found = false; 

    // explode on every word 
    $words = explode(" ", $line); 

    // loop through every word 
    foreach($words as $word) { 
     if(in_array($word, $array2)) { 
      $word_found = true; 
      break; 
     } 
    } 

    // if the word is found do something 
    if($word_found) { 
     echo "There is a match found."; 
    } else { 
     echo "No match found." 
    } 
} 

devrait vous donner le résultat que vous voulez. Je suis absolument sûr qu'il y a un moyen plus efficace de le faire .. mais c'est pour vous 2 découvrir je me désiste .. bonne chance

+0

Merci beaucoup, je n'ai pas essayé cela car j'ai trouvé un moyen de le faire en utilisant deux boucles. Merci beaucoup! – ApiMail

1

Vous pouvez d'abord normaliser vos données, puis utiliser les fonctions intégrées de PHP pour obtenir l'intersection entre deux tableaux. Tout d'abord, convertissez chaque tableau avec ces multiples chaînes contenant plusieurs mots dans un tableau contenant uniquement tous les mots.

Une fonction utile pour obtenir tous les mots d'une chaîne peut être str_word_count.

Ensuite, comparez les deux tableaux «tous les mots» les uns avec les autres en utilisant array_intersect.

Quelque chose comme ceci:

$words1 = array_unique(str_word_count(implode(' ', $Array), 1)); 
$words2 = array_unique(str_word_count(implode(' ', $SecondArray), 1)); 
$intersection = array_intersect($words1, $words2); 

if(count($intersection)) 
{ 
    # there is a match! 
} 
+0

Bonjour, Merci pour la réponse, je pense que je sais ce que vous voulez dire ici, bien que le problème est que je dois garder deux tableaux séparés car j'ai besoin de la position d'index pour chaque tableau afin que je puisse stocker chaque entrées appariées de tableaux en tant que variables pour une utilisation ultérieure. – ApiMail

+0

@ApiMail: Vous n'avez pas besoin d'imploser les tableaux, vous pouvez donc conserver des index. Si vous ajoutez des données de démonstration à votre question et que vous spécifiez un peu mieux ce que vous voulez en tirer, il serait trivial de modifier l'exemple de code pour mieux vous montrer de quoi je parle. – hakre

+0

Merci, j'ai trouvé un moyen de le faire en utilisant deux boucles, merci beaucoup bien! – ApiMail

Questions connexes