我有2个数组,$arr1和$arr2:

$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', 'QuantityMinimum', 'SupplierName', 'SPN',

'PartNumEx', 'UOM', 'ListPric', 'MPN', 'MfrName', 'CatLevel1', 'CatLevel2',

'CatLevel3', 'CatLevel4', 'AcctLevel1', 'AcctLevel2', 'AcctLevel3', 'AcctLevel4',

'Desc1', 'Desc2', 'PicName', 'SupplierURL', '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函数,所以我做了一个组合,首先检查完全匹配,如果没有找到,则尝试找到最接近的匹配.现在,问题是某些列具有相似的名称,例如. 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数组匹配匹配里面的值,php – 比较数组并搜索匹配的值相关推荐

  1. Android项目 匹配Text里面的Emoji 和 QQ表情

    吐槽:第一次写博客,新手一枚.写这个博客为了共享一下资源,大家相互学习,最主要目的是抛砖引玉,引大婶指高见. 前言:需求是这样的,搞聊天,而且是在一个字库里面没有emoji的android系统里面搞. ...

  2. Android 使用java 代码获取res 里面的value 定义的数组

    现在res value 里面定义了一个array.xml 内容如下 <?xml version="1.0" encoding="utf-8"?> & ...

  3. android 通讯录 首字母索引,android仿微信通讯录搜索(匹配拼音,字母,索引位置标记颜色)...

    前言: 仿微信通讯录搜索功能,通过汉字或拼音首字母找到匹配的联系人并显示匹配的位置 一:先看效果图 字母索引 搜索匹配 二:功能分析 1:汉字转拼音 通讯录汉字转拼音(首个字符当考虑姓氏多音字), 现 ...

  4. 正则匹配里面的(.*?)

    . 可以匹配任何字符 * 可以匹配0个或无限多个之前的字符 .? 表示匹配任意字符到下一个符合条件的字符 # 创建正则表达式规则对象,匹配每页里的段子内容,re.S 表示匹配全部字符串内容patter ...

  5. 3.js中判断数组中是否存在某个对象/值,判断数组里的对象是否存在某个值 的五种方法 及应用场景|判断数组里有没有某对象,有不添加,没有则添加到数组

    3.js中判断数组中是否存在某个对象/值,判断数组里的对象是否存在某个值 的五种方法 及应用场景 一.当数组中的数据是简单类型时: 应用js中的indexof方法:存在则返回当前项索引,不存在则返回 ...

  6. 微信小程序云开发云数据库_聚合操作_联表查询_对象数组某字段与另一集合的某字段相等匹配

    目录 表结构 需求 Aggregate.unwind 查询操作代码 查询结果 表结构 错题表 wrong 单选题表 single 需求 连接错题表和单选题表,筛选出错题的题目ID.题目.答案.解析.用 ...

  7. python正则匹配括号以及内容_【Python】正则表达式匹配最里层括号的内容

    现在有一个字符串: str1 = '(subject_id = "A" OR (status_id = "Open" AND (status_id = &quo ...

  8. 正则匹配字符串里的a标签

    当后台返回一大段富文本给我们的时候,我想取出里面所有的a标签,在网上找了很多文章,发现没有写的太好的 所以自己写了一个,主要作用是匹配a标签和里面的href,实际上一个完整的a标签上可能包含很多东西 ...

  9. import_array()报错,返回值类型与函数类型不匹配

    问题: C++调用python程序,导入python数组时import_array()出现返回值类型与函数类型不匹配. 解决办法: 首先环境必须要配置无误,保证有numpy包.如图,右键进入__mul ...

最新文章

  1. sql insert and update
  2. python 3.7.3 运算7错误_Python中通常不应该犯的7个错误
  3. 浅析移动端建站周期影响因素有哪些?
  4. python中的变量与对象
  5. python读取坐标文本文件_使用python读取txt坐标文件生成挖空矿山_探矿批量
  6. DIV+CSS规范命名集合
  7. 数据之美系列5(转载)
  8. tbase 之二 pgbench
  9. ajax get提交中文参数乱码
  10. Android仿人人客户端(v5.7.1)——个人主页(二)
  11. 金融工程学(七):互换的运用
  12. 计算机二进制除法除数为0,怎么做二进制数的除法运算
  13. 安卓开发 之小白养成-Android环境搭建 二
  14. 洞见科技解决方案总监薛婧:联邦学习助力数据要素安全流通
  15. 备案需要域名证书吗?如何下载域名证书?
  16. 别让那些贩卖焦虑的人,打扰到你的人生
  17. windows10 该值受安全引导策略保护,无法进行修改或删除。禁用驱动程序强制签名
  18. 对象的属性名与属性值
  19. AsyncTask的优缺点
  20. 如何判断两个日期在一周内

热门文章

  1. php 并发 100 压测,简单PHP把握站点并发数
  2. python异常值处理箱型图_如何利用python处理异常值?
  3. mysql 交叉统计_Mysql静态行列转换交叉查询
  4. python开发小型数据库_python web开发之数据库ORM的 peewee库 动手学习实践笔记
  5. 【计算机科学基础】计算机概述
  6. 【软件工程】软件开发的本质
  7. 【逻辑与计算理论】Lambda 演算的类型与其 Lambda 演算建模
  8. EasyUI Form提交后json数据IE上需要下载(转)
  9. 全球最大的多晶硅制造商保利协鑫去年营收220亿元 售电业务表现抢眼
  10. maven deploy distributionManagement