Heim >Backend-Entwicklung >PHP-Tutorial >2000条数据的数组,找出有重复值的索引
2000条数据的数组,找到有重复值的索引.
例如 一个数组含有 1,2,2,2,3,4,5,5,5,6,2,2,7,8,2,5,3,9,...............
得到 2的重复索引2,3,10,11,14
5的重复索引7,8,15
....
不能2重for或者while循环,这样代价太大.
------解决方案--------------------
$arr = array(1,2,2,2,3,4,5,5,5,6,2,2,7,8,2,5,3,9);$tmp = array();foreach($arr AS $k => $v){ if(isset($tmp[$v])) { if($tmp[$v]) { $tmp[$v] .= ","; } $tmp[$v] .= $k; } else { $tmp[$v] = ""; }}foreach($tmp AS $k => $v){ if($v) { echo $k, "=>", $v, "\n"; }}unset($tmp);<br><font color="#e78608">------解决方案--------------------</font><br>
$a = array( 1,2,2,2,3,4,5,5,5,6,2,2,7,8,2,5,3,9);$r = array();foreach($a as $v) { if(isset($r[$v])) continue; if($t = array_keys(array_intersect($a, array($v)))) { unset($t[0]); $r[$v] = join(',', $t); }}$r = array_diff($r, array(''));print_r($r);<br><font color="#e78608">------解决方案--------------------</font><br>
$arr = array(1,2,2,2,3,4,5,5,5,6,2,2,7,8,2,5,3,9);$str = implode(',', $arr);foreach ($arr as $k=>$v){ $t[$v] .= !isset($t[$v]) ? '' : $k . ','; $l += strlen($v); if((strrpos($str, $v.'')) == $l-strlen($v)) $t[$v] = trim($t[$v], ','); ++$l;}print_r($t);<div class="clear"> </div>