$a=array(5000){
    [0] => array(2) {
         ["one"] => string(2) "zhang"
         ["two"] => string(13) "lili"
    }
    [1] => array(2) {
         ["one"] => string(2) "zhang"
         ["two"] => string(13) "lili"
    }
    [2] => array(2) {
         ["one"] => string(2) "wang"
         ["two"] => string(13) "lili"
    }
    [3] => array(2) {
         ["one"] => string(2) "zhang"
         ["two"] => string(13) "lulu"
    }
    [4] => array(2) {
         ["one"] => string(2) "zhang"
         ["two"] => string(13) "lili"
    }
    .......
}数组如上,想去掉重复的如
   [1] => array(2) {
         ["one"] => string(2) "zhang"
         ["two"] => string(13) "lili"
    }
    [4] => array(2) {
         ["one"] => string(2) "zhang"
         ["two"] => string(13) "lili"
    }和[0]重复都是要删除的,
有什么高效的方法,因为数据较多,需要考虑效率!

解决方案 »

  1.   

    array_unique  这个只能对一维数组去重
    $newarr = array();
    foreach ($array as $arr) 
    {
        if (isset($newarr[$arr['name']])) 
    {
            $newarr[$arr['name']]['num'] += $arr['num'];
        }
    else
    {
            $newarr[$arr['name']] = $arr;
        }
    }
    $newarr = array_values($newarr); // 如果键名不需要为数字可以去掉这句
    用这个试试,你自己改一下
      

  2.   

    怎么又在误人子弟?!array_unique 只能作用于一维数组,而楼主的是二维数组$a = array( 
      array( 'one' => "zhang ", 'two' => "lili "),
      array( 'one' => "zhang ", 'two' => "lili "),
      array( 'one' => "wang ", 'two' => "lili "),
      array( 'one' => "zhang ", 'two' => "lulu "),
      array( 'one' => "zhang ", 'two' => "lili "),
    );
    // array_map 回调函数
    function foo($v) {
      return join(',', $v);
    }$p = array_map('foo', $a); //将二维数组转换为一维数组
    $t = array_intersect(array_unique($p), $p); 
    $k = array_diff(array_keys($p), array_keys($t));foreach($k as $i) unset($a[$i]);在我的服务器中测试,$a平均每个元素的处理时间为 16 微秒左右
      

  3.   

    用array_diff()
    得到的是N个数组的不同元素
    楼主只要循环判断大数组的子数组就可以了
      

  4.   

    这个问题是这样的:
    以前的array_unique是不能用的,因为比较的时候是转化为string比较,楼主的情况会全部相等(因为都是
    'Array')
    但是现在(>5.2.9)array_unique加了一个参数,如果设为SORT_REGULAR,是会做一般意义上(不转化为string的比较的),因此楼主的情况是可以直接用的