Сравнить все строки в массиве со всеми строками в другом массиве, PHP - PullRequest
0 голосов
/ 30 октября 2011

То, что я пытаюсь сделать, это на самом деле, но я углубляюсь во многие детали, чтобы убедиться, что это легко понять.У меня есть массив, в котором есть несколько строк.Затем у меня есть другая, в которой есть несколько других коротких строк, обычно одно или два слова.

Мне нужно, чтобы, если мое приложение нашло одно из строковых слов во втором массиве, в одной из строк первого массиваон перейдет к следующему действию.Так, например, если одна из строк в первом массиве - «Это код PHP», а затем одна из строк во втором - «PHP», то он находит совпадение и переходит к следующему действию.Я могу сделать это, используя этот код:

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';

Однако при этом сравнивается только объект First Array с текущим индексом в цикле с текущим индексом объектов Second Array в цикле.

Iнужно, чтобы он сравнил все значения в массиве, чтобы он искал каждое значение в первом массиве для поиска первого значения во втором массиве, затем каждое значение в первом массиве для поиска второго значения во втором массиве и т. д.

Я думаю, мне нужно сделать две петли?Я попробовал это, но у меня были проблемы с массивом, возвращающим только первое значение.

Если кто-нибудь сможет помочь, это будет оценено!Я отмечу правильный ответ и +1 любые полезные комментарии!

Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 октября 2011

Может быть, следующее решение:

// 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."
    }
}

Должно дать вам желаемый результат.Я абсолютно уверен, что есть более эффективный способ сделать это .. но вот для вас 2, узнайте, я рад ... удачи

1 голос
/ 30 октября 2011

Вы можете сначала нормализовать ваши данные, а затем использовать встроенные в PHP функции массива, чтобы получить пересечение между двумя массивами.

Прежде всего преобразуйте каждый массив с несколькими строками из нескольких слов в массив, содержащий только все слова.

Полезная функция для получения всех слов из строки может быть str_word_count.

Затем сравните эти два массива "все слова" друг с другом, используя array_intersect.

Примерно так:

$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!
}
...