获取数组中的重复值,而忽略某些值和值前面的数字

时间:2018-12-22 11:50:56

标签: php arrays

我正在尝试确定数组中除CERTIFICATE OF ANALYSIS之外的值是否相同,并且波纹管是我的数组

[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

因为起源证书出现了两次,DHL出现了两次,但分析证书却例外

我尝试使用以下代码

function array_not_unique( $a = array() )
{
  return array_diff_key( $a , array_unique( $a ) );
}

,但由于名称前面有一些数字,因此无法得到批准。我需要在这里使用正则表达式吗?

1 个答案:

答案 0 :(得分:1)

您可以首先使用正则表达式提取“键”信息,然后通过键将值存储在关联数组中。最后,从一个键具有多个相关值的关联数组中获取值:

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;
}