php – 比较数组并搜索匹配的值

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 比较数组并搜索匹配的值脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有2个数组,$arr1和$arr2: @H_512_5@

$arr1是我希望从excel文件中读取的列列表,$arr2是实际找到的列数组.

有时上传文件包含

>拼写错误的列名称
>列的顺序不同
>可能会遗漏一些列
>此外,列名可能包含不同字符集中的字母(例如,希腊语’M’看起来像拉丁语M但不能被视为相同).

让我们说,例如,我们有以下2个数组:

$arr1 = array('Action','LotSize','QuantITyMinimum','supplierName','SPN','PartNumExt','UOM','ListPRice','MPN','MFrName','CatLevel1','CatLevel2','CatLevel3','CatLevel4','CatLevel5','CatLevel6','AcctLevel1','AcctLevel2','AcctLevel3','AcctLevel4','AcctLevel5','AcctLevel6','Desc1','Desc2','PicName','supplierURL','CatPart','TechSPEc','Kad');    

$arr2 = array('Action','LotSze','PartNumEx','ListPric','MfrName','CatPart');

我需要比较2个数组并将匹配元素的位置保存到第3个数组:

$arr3 = ([0]=>0,[1]=>1,[2]=>3,[3]=>5,[4]=>6,[5]=>...);

在$arr2中显示$arr1的每个匹配元素的位置.

“匹配”是指所有相同的元素(例如Action),或者部分相同(例如test& Tes),以及那些相似但不同情况的元素(例如Foo& foo,酒吧和酒吧).

我几天前发布了this question,我得到了一个很好的答案,但经过多次测试后,我发现它并不总是按预期工作.

因此,经过更多搜索,我找到了levenshtein@L_126_13@,所以我做了一个组合,首先检查完全匹配,如果没有找到,则尝试找到最接近的匹配.现在,问题是某些列具有相似的名称,例如. Catlevel1,Catlevel2,…,Catlevel6.因此,如果缺少Catlevel2,它将与最后一个&最相似的列是Catlevel6.

这是我到目前为止:

foreach($all_columns as $i => $val1) {
    $result = null;
    // SeArch the second array for an exact match,if found
    if(($found = array_search($val1,$_SESSION['found_columns'],true)) !==false) {
        $result = $found; 
    } else {
        // Otherwise,see if we can find a case-insensitive matching string 
        //where the element From $arr2 is found within the one from $arr1
        foreach( $_SESSION['found_columns'] as $j => $val2) {
            if($val1<>'' && $val2<>'') {
                if( strIPOs( $val1,$val2) !== false ) {
                    $result = $j;
                    break;
                } else {
                    $notfound .= $val1.',';
                    break;
                }
            }
        }
    }
    $_SESSION['found_column_positions'][$i] = $result;
}

/*****ALTERNATIVE METHOD USING levenshtein*****/
$i=0;
foreach($all_columns as $key => $value) {
    $found = wordMatch($value,$arr2,2);
    $pos = array_search($found,$_SESSION['found_columns']); 
    $_SESSION['found_column_positions'][$i] = $pos;
    $i++;
}
function wordMatch($input,$array,$sensitivity){
    $words = $array;
    $shortest = -1;
    foreach ($words as $word) {
        $lev = levenshtein($input,$word);
        if ($lev == 0) {
            $closest = $word;
            $shortest = 0;
            break;
        }
        if ($lev <= $shortest || $shortest < 0) {
            $closest  = $word;
            $shortest = $lev;
        }
    }
    if($shortest <= $sensitivity){
        return $closest;
    } else {
        return 0;
    }
}

是否有更好的方法来比较2个数组,找到最接近的值匹配并将匹配值键保存到第3个数组以用作2个数组之间的关键引用?

解决方法

以下脚本将完成工作.

<?PHP
$arr1 = array('Action','CatPart');

$arr3 = array();

foreach($arr1 as $key=>$val)
{
    $arr3[$key] = array_search($val,$arr2);
}

print_r($arr3);
?>

脚本宝典总结

以上是脚本宝典为你收集整理的php – 比较数组并搜索匹配的值全部内容,希望文章能够帮你解决php – 比较数组并搜索匹配的值所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。