$array = array(
array(
'id' => 1,
'name' => 'a',
'words' => '你好',
),
array(
'id' => 2,
'name' => 'b',
'words' => '你是谁',
),
array(
'id' => 1,
'name' => 'a',
'words' => '我爸爸是李刚',
),
array(
'id' => 1,
'name' => 'c',
'words' => '为人民服务',
),
array(
'id' => 1,
'name' => 'a',
'words' => '法克鱿',
),
);这样一个二维数组,写一个算法,去重,id和name相等的数组,只留下一个,其他的删掉。

解决方案 »

  1.   

    现在公布正确答案,简化代码者,有分 $num = count($array);
    foreach($array as $key => $value)
    {
    $break = false;
    for($i=0; $i<5; $i++)
    {
    if($key == $i)
    { continue; }
    if($array[$i]['id'] == $value['id'] && $array[$i]['name'] == $value['name'])
    { $break = true;  break; }
    }
    if($break)
    { continue; }
    $new_array[] = $value;
    }
      

  2.   

    function filter($datas) {
      $hashTable = array();
      foreach($datas as $index => $data) {
        if(isset($hashTable[$key = $data['id'] . $data['name']])) 
          unset($datas[$index]);
        $hashTable[$key] = 1;
      }
      return $datas;  //不需要重建索引
      //return array_values($datas); //如果想要返回的数组重建索引
    }
      

  3.   

    function filter($datas) {
      foreach($datas as $i => $data) {
        $j = $i;
        while($j -- >= 0) {
          if($data['id'] == $datas[$j]['id'] && $data['name'] == $datas[$j]['name']) {
            unset($datas[$i]);
            break;
          }
        }
      }
      return $datas;  //不需要重建索引
      //return array_values($datas); //如果想要返回的数组重建索引
    }
    这是你的那种做法
      

  4.   

    你这个是有潜在问题的。 
    比如说   id= 111, name = 222  和   id=11, name= 1222
    那就搞毛了。
      

  5.   


    恩...是的...呵呵...谢谢提醒....这里$key = $data['id'] . $data['name']说明的就是用一个hash的思想.....$data['id'] . '|' . $data['name']这样就解决了.
      

  6.   


    $new=array();
    foreach($array as $value){
    $new[$value['id'].$value['name']]=
    array("id"=>$value['id'],"name"=>$value['name'],"words"=>$value['words']);
    }
    print_r($new);
      

  7.   

    $new=array();
    foreach($array as $value){
        isset($key = $value['id'] . "|" . $value['name']) or $new[$key] = array("id"=>$value['id'],"name"=>$value['name'],"words"=>$value['words']);
    }呵呵, 8楼好方法....
      

  8.   

    foreach($array as $value){
        isset($result[$key = $value['id'] . "|" . $value['name']]) or $result[$key] = array("id"=>$value['id'],"name"=>$value['name'],"words"=>$value['words']);
    }抱歉, 上面写错了, 顺便再利用php根据运算符自动创建再改进下
      

  9.   


    $arraytest=array();
            foreach( $array as $value ){
             $arraytest[$value['id'].$value['name']]=$value;
            }
            print_r($arraytest);
      

  10.   

    花时间把代码补全了:
    <?php$array = array(
                array(
                    'id'    => 1,
                    'name'    => 'a',
                    'words'    => '你好',
                ),
                array(
                    'id'    => 2,
                    'name'    => 'b',
                    'words'    => '你好',
                ),
                array(
                    'id'    => 1,
                    'name'    => 'a',
                    'words'    => '我爸爸是李刚',
                ),
                array(
                    'id'    => 1,
                    'name'    => 'c',
                    'words'    => '为人民服务',
                ),
                array(
                    'id'    => 1,
                    'name'    => 'a',
                    'words'    => '法克鱿',
                ),
            );$arr=array();
    foreach($array as $val)
    {
        $arr[$val['id'].'@'.$val['name']]=$val['words'];
    }
    $arr=array_unique($arr);$result=array();
    foreach($arr as $key=>$value)
    {
        $temp=explode('@',$key);
        $result[]=array('id'=>$temp[0],'name'=>$temp[1],'words'=>$value);
    }
    print_r($result);
    ?>
      

  11.   

    $out = array();
    foreach($array as $v) {
      $k = "$v[id]~!@#$v[id]";
      if(! array_key_exists($k, $out)) //保留第一个符合条件的元素,若需保留最后一个符合条件的元素,则注释掉该行
        $out[$k] = $v;
    }print_r(array_values($out));