【问题标题】:Compare All strings in a array to all strings in another array, PHP将数组中的所有字符串与另一个数组中的所有字符串进行比较,PHP
【发布时间】:2011-10-30 18:01:44
【问题描述】:

我真正想做的是,但我会详细介绍很多细节以确保它易于理解。 我有一个数组,里面有几个字符串。然后我有另一个,其中几乎没有其他短字符串,通常是一两个词。

我需要它,以便如果我的应用程序在第二个数组中找到一个字符串单词,在第一个数组字符串之一中,它将继续执行下一个操作。 例如,如果第一个数组中的一个字符串是“This is PHP Code”,然后第二个数组中的一个字符串是“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';

但是,这只会将循环中当前索引处的第一个数组对象与循环中当前索引处的第二个数组对象进行比较。

我需要它来比较数组中的所有值,以便它在第一个数组中的每个值中搜索第二个数组中的第一个值,然后在第一个数组中的每个值中搜索第二个数组中的第二个值,然后以此类推。

我想我必须做两个循环?我试过了,但数组只返回第一个值时遇到问题。

如果有人可以提供帮助,我们将不胜感激! 生病标记正确的答案和 + 1 任何有用的 cmets!

谢谢!

【问题讨论】:

    标签: php arrays string compare


    【解决方案1】:

    也许以下是一个解决方案:

    // 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 找出我的问题.. 祝你好运

    【讨论】:

      【解决方案2】:

      您可以先规范化您的数据,然后使用 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!
      }
      

      【讨论】:

      • 您好,感谢您的回复,我想我知道您的意思,尽管问题是我需要将它保留为两个单独的数组,因为我需要每个数组的索引位置,以便我可以存储每个数组数组匹配的条目作为变量供以后使用。
      • @ApiMail:您不需要内爆数组,因此您可以维护索引。如果您将演示数据添加到您的问题中并更好地指定您希望从中获得什么,那么更改代码示例以更好地向您展示我正在写的内容应该是微不足道的。
      • 谢谢,我找到了使用两个循环的方法,非常感谢!
      【解决方案3】:
      function findUnit($packaging_units, $packaging)
      {
          foreach ($packaging_units as $packaging_unit) {
              if (str_contains(strtoupper($packaging[3]), $packaging_unit)) {
                  return $packaging_unit;
              }
          }
      }
      

      这里第一个参数是数组,第二个是要查找的变量

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-01
        • 2021-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多