例如 一个数组含有   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循环,这样代价太大.

解决方案 »

  1.   

    hash 值 => key 遍历2次,输出结果
      

  2.   

    不能2重for或者while循环这是必须的
      

  3.   


    $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);结果:
    2=>2,3,10,11,14
    3=>16
    5=>7,8,15
      

  4.   

    $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);Array
    (
        [2] => 2,3,10,11,14
        [3] => 16
        [5] => 7,8,15
    )
      

  5.   

    $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)))) {  
        if(!isset($t[1]))unset($t[0]);
        $r[$v] = join(',', $t);
      }
    }
    $r = array_diff($r, array(''));
     var_dump($r);echo "</br>";
      

  6.   


    $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);
    如果foreach两次就很简单搞定了,像#3楼的。完全没有什么影响到什么效率
      

  7.   

    如果 要求带上自己呢?
    那么问题就变得异常简单了$arr = array(1,2,2,2,3,4,5,5,5,6,2,2,7,8,2,5,3,9);
    $t = array();
    foreach ($arr as $k=>$v) {
        if(isset($t[$v])) $t[$v] .= ",$k";
        else $t[$v] = $k;
    }
      

  8.   

    刚毕业,php菜鸟。求学习路线
      

  9.   

    不包括自己的优化版本$arr = array(1,2,2,2,3,4,5,5,5,6,2,2,7,8,2,5,3,9);
    $t = array();
    foreach ($arr as $k=>$v) {
        if(!isset($t[$v])) $t[$v] = '';
        else $t[$v] .= ($t[$v] == '' ? '' : ',') . $k;
    }
    $t = array_diff($t, array(''));
    print_r($t);