Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取数组中的重复值,同时忽略值前面的某些值和数字_Php_Arrays - Fatal编程技术网

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

Php 获取数组中的重复值,同时忽略值前面的某些值和数字,php,arrays,Php,Arrays,我试图找出数组中除了分析证书和bellow之外的相同值是否是我的数组 [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] =

我试图找出数组中除了分析证书和bellow之外的相同值是否是我的数组

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

但是由于名字前面有一些数字,所以不能把它弄出来。这里是否需要使用正则表达式以及如何使用?

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

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

这是非常好的回答,先生!