【问题标题】:array_intersection parital matches in two arrays两个数组中的数组交集部分匹配
【发布时间】:2015-07-15 09:42:20
【问题描述】:

我有 2 个数组:

$array1 = array("dog","cat","butterfly")
$array2 = array("dogs","cat","bird","cows")

与 $array1 相比,我需要从 $array2 中获取所有部分匹配项,如下所示:

array("dog","cat")

所以我需要检查 $array2 中是否有部分单词匹配并输出带有 $array1 键和值的新数组。

array_intersection 只输出完全匹配

谢谢

【问题讨论】:

  • 什么是部分匹配?
  • 这意味着如果array2有bulldog并且array1有dog,那么我们可以说我们从array2找到了dog,我们可以将它添加到我们的输出数组中

标签: php arrays


【解决方案1】:

试试这个,

$array1 = array("dog","cat","butterfly");
$array2 = array("dogs","cat","bird","cows");

function partial_intersection($a,$b){
    $result = array();
    foreach($a as $v){
        foreach($b as $val){
            if( strstr($val,$v) || strstr($v,$val) ){ $result[] = $v; }
        }
    }
    return $result;
}

print_r(partial_intersection($array1,$array2));

【讨论】:

  • 你为什么不这样简化if( strstr($val,$v) || strstr($v,$val) ){ $result[] = $v; }
【解决方案2】:

获得相同结果的更多方法

<?php

   $array1 = array("dog","cat","butterfly");
   $array2 = array("dogs","cat","bird","cows");

   // Array output will be displayed from this array
   $result_array = $array1;

   // Array values are compared with each values of above array
   $search_array = $array2;


   print_r( array_filter($result_array, function($e) use ($search_array) {
       return preg_grep("/$e/",$search_array);
   }));

?>

输出

[akshay@localhost tmp]$ php test.php 
Array
(
    [0] => dog
    [1] => cat
)

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 2011-08-16
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-30
    • 1970-01-01
    相关资源
    最近更新 更多