php - 获取数组中的重复值,同时忽略值前面的某些值和数字
问题描述
我试图找出除了分析证书之外的数组中是否有相同的值,下面是我的数组
[0] => 1009
[1] => 1033
[2] => 2052
[3] => ANNEX 4E
[4] => Bill of Lading
[5] => CERTIFICATE OF ANALYSIS 123456
[6] => CERTIFICATE OF ANALYSIS 000999
[7] => CERTIFICATE OF ORIGIN 123456
[8] => CERTIFICATE OF ORIGIN 789934
[9] => DHL - 1387563870
[10] => DHL - 5130431633
所以在检查后我期待下面的结果
[1] => CERTIFICATE OF ORIGIN 123456
[2] => CERTIFICATE OF ORIGIN 789934
[3] => DHL - 1387563870
[4] => DHL - 5130431633
因为 CERTIFICATE OF ORIGIN 出现了两次,DHL 出现了两次,除了 CERTIFICATE OF ANALYSIS
我尝试使用以下代码
function array_not_unique( $a = array() )
{
return array_diff_key( $a , array_unique( $a ) );
}
但由于名称前有一些数字,因此无法输出。我需要在这里使用正则表达式吗?如何?
解决方案
您可以首先使用正则表达式提取“键”信息,然后将值按键存储在关联数组中。最后,从一个键具有多个关联值的关联数组中获取值:
function array_not_unique( $a = [] ) {
$byKey = [];
foreach($a as $val) {
$key = preg_replace("/[^a-z]+$/i", "", $val);
if ($key && $key != "CERTIFICATE OF ANALYSIS") $byKey[$key][] = $val;
}
$result = [];
foreach($byKey as $arr) {
if (count($arr) > 1) $result = array_merge($result, $arr);
}
return $result;
}
推荐阅读
- html - 如何使用 unicode-bidi: 使用 RTL 语言的纯文本修复 html 文本区域中的文本光标位置?
- amazon-web-services - AWS 拒绝策略角色特定账户
- pycharm - 从我在 PyCharm 中中断的地方开始
- javascript - 如何使用 javascript fetch api 在云端上传视频?
- firebase - Flutter Web:Safari Google 登录第一次尝试被阻止
- python - 如何将 Python 中 appJar 表单中的条目添加到 sqLite3
- laravel - 如何在 Laravel 刀片上回显函数名称
- typescript - 如何为 Vuex 定义 VueJS3 Typescript 接口
- python - 熊猫数据透视表,排序值
- unit-testing - 在具有 FreeRTOS 依赖性的项目中进行单元测试