php数组匹配匹配里面的值,php – 比较数组并搜索匹配的值
我有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 – 比较数组并搜索匹配的值相关推荐
- Android项目 匹配Text里面的Emoji 和 QQ表情
吐槽:第一次写博客,新手一枚.写这个博客为了共享一下资源,大家相互学习,最主要目的是抛砖引玉,引大婶指高见. 前言:需求是这样的,搞聊天,而且是在一个字库里面没有emoji的android系统里面搞. ...
- Android 使用java 代码获取res 里面的value 定义的数组
现在res value 里面定义了一个array.xml 内容如下 <?xml version="1.0" encoding="utf-8"?> & ...
- android 通讯录 首字母索引,android仿微信通讯录搜索(匹配拼音,字母,索引位置标记颜色)...
前言: 仿微信通讯录搜索功能,通过汉字或拼音首字母找到匹配的联系人并显示匹配的位置 一:先看效果图 字母索引 搜索匹配 二:功能分析 1:汉字转拼音 通讯录汉字转拼音(首个字符当考虑姓氏多音字), 现 ...
- 正则匹配里面的(.*?)
. 可以匹配任何字符 * 可以匹配0个或无限多个之前的字符 .? 表示匹配任意字符到下一个符合条件的字符 # 创建正则表达式规则对象,匹配每页里的段子内容,re.S 表示匹配全部字符串内容patter ...
- 3.js中判断数组中是否存在某个对象/值,判断数组里的对象是否存在某个值 的五种方法 及应用场景|判断数组里有没有某对象,有不添加,没有则添加到数组
3.js中判断数组中是否存在某个对象/值,判断数组里的对象是否存在某个值 的五种方法 及应用场景 一.当数组中的数据是简单类型时: 应用js中的indexof方法:存在则返回当前项索引,不存在则返回 ...
- 微信小程序云开发云数据库_聚合操作_联表查询_对象数组某字段与另一集合的某字段相等匹配
目录 表结构 需求 Aggregate.unwind 查询操作代码 查询结果 表结构 错题表 wrong 单选题表 single 需求 连接错题表和单选题表,筛选出错题的题目ID.题目.答案.解析.用 ...
- python正则匹配括号以及内容_【Python】正则表达式匹配最里层括号的内容
现在有一个字符串: str1 = '(subject_id = "A" OR (status_id = "Open" AND (status_id = &quo ...
- 正则匹配字符串里的a标签
当后台返回一大段富文本给我们的时候,我想取出里面所有的a标签,在网上找了很多文章,发现没有写的太好的 所以自己写了一个,主要作用是匹配a标签和里面的href,实际上一个完整的a标签上可能包含很多东西 ...
- import_array()报错,返回值类型与函数类型不匹配
问题: C++调用python程序,导入python数组时import_array()出现返回值类型与函数类型不匹配. 解决办法: 首先环境必须要配置无误,保证有numpy包.如图,右键进入__mul ...
最新文章
- sql insert and update
- python 3.7.3 运算7错误_Python中通常不应该犯的7个错误
- 浅析移动端建站周期影响因素有哪些?
- python中的变量与对象
- python读取坐标文本文件_使用python读取txt坐标文件生成挖空矿山_探矿批量
- DIV+CSS规范命名集合
- 数据之美系列5(转载)
- tbase 之二 pgbench
- ajax get提交中文参数乱码
- Android仿人人客户端(v5.7.1)——个人主页(二)
- 金融工程学(七):互换的运用
- 计算机二进制除法除数为0,怎么做二进制数的除法运算
- 安卓开发 之小白养成-Android环境搭建 二
- 洞见科技解决方案总监薛婧:联邦学习助力数据要素安全流通
- 备案需要域名证书吗?如何下载域名证书?
- 别让那些贩卖焦虑的人,打扰到你的人生
- windows10 该值受安全引导策略保护,无法进行修改或删除。禁用驱动程序强制签名
- 对象的属性名与属性值
- AsyncTask的优缺点
- 如何判断两个日期在一周内
热门文章
- php 并发 100 压测,简单PHP把握站点并发数
- python异常值处理箱型图_如何利用python处理异常值?
- mysql 交叉统计_Mysql静态行列转换交叉查询
- python开发小型数据库_python web开发之数据库ORM的 peewee库 动手学习实践笔记
- 【计算机科学基础】计算机概述
- 【软件工程】软件开发的本质
- 【逻辑与计算理论】Lambda 演算的类型与其 Lambda 演算建模
- EasyUI Form提交后json数据IE上需要下载(转)
- 全球最大的多晶硅制造商保利协鑫去年营收220亿元 售电业务表现抢眼
- maven deploy distributionManagement