Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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,我检查了其他类似的问题,比如 这只会给出正确或错误的结果 及 它获取复制的值,但似乎不是它们的键 我需要查看数组,并确定要向最终用户重复的任何重复项,包括数组键,以便可以将这些键作为excel行号进行回显 Excel电子表格示例: E123456 E234567 E345678 E123456 E456789 E111111 E123456 E234567 E333333 E444444 最终用户的预期结果: E123456 was a duplicate, found on lines 1,

我检查了其他类似的问题,比如 这只会给出正确或错误的结果

及 它获取复制的值,但似乎不是它们的键

我需要查看数组,并确定要向最终用户重复的任何重复项,包括数组键,以便可以将这些键作为excel行号进行回显

Excel电子表格示例:

E123456
E234567
E345678
E123456
E456789
E111111
E123456
E234567
E333333
E444444
最终用户的预期结果:

E123456 was a duplicate, found on lines 1, 4, and 7
E234567 was a duplicate, found on lines 2 and 8
所以我需要存储复制的值和复制的键


我意识到这将是array_unique、array_diff、array_键和其他一些键的组合,但我不确定将调用按什么顺序堆叠以获得所需的结果,在不使用导致系统阻塞的暴力方法的情况下,文件大小可能有数百行

您可以使用array\u count\u values函数获取源数组中每个值的数量,然后仅保存发生多次的项。现在,带有第二个参数的array_keys返回具有该值的数组的键

// find duplicates. They will be keys of the array
$res = array_count_values($arr);
$res = array_filter($res, function($x) { return $x > 1;});
// find indexes corresponding that duplicates values
foreach($res as $k=>&$v) {
   $v = array_keys($arr, $k, true);    
}
print_r($res);

你不会用几百个项目阻塞一个系统。你看过这个了吗:在你的行上迭代并填充一个数组,其中键是你想要唯一的值,值是它出现的行的列表。@Eriks Klotins谢谢,但我知道这可以在excel中完成;问题是,我无法控制上传该文件的人是否会费心事先这么做: