Check and return duplicates array php

前端 未结 10 2113
我寻月下人不归
我寻月下人不归 2020-12-05 22:33

I would like to check if my array has any duplicates and return the duplicated values in an array. I want this to be as efficient as possible.

Example:



        
相关标签:
10条回答
  • 2020-12-05 23:14

    this will be ~100 times faster than array_diff

    $dups = array();
    foreach(array_count_values($arr) as $val => $c)
        if($c > 1) $dups[] = $val;
    
    0 讨论(0)
  • 2020-12-05 23:16

    You can do like this:

    function showDups($array)
    {
      $array_temp = array();
    
       foreach($array as $val)
       {
         if (!in_array($val, $array_temp))
         {
           $array_temp[] = $val;
         }
         else
         {
           echo 'duplicate = ' . $val . '<br />';
         }
       }
    }
    
    
    $array = array(1,2,2,4,5);
    showDups($array);
    

    Output:

    duplicate = 2
    
    0 讨论(0)
  • 2020-12-05 23:19

    If you need a solution that will work with an array of arrays (or any array values other than integers or strings) try this:

    function return_dup( $arr ) {
        $dups = array();
        $temp = $arr;
        foreach ( $arr as $key => $item ) {
            unset( $temp[$key] );
            if ( in_array( $item, $temp ) ) {
                $dups[] = $item;
            }
        }
        return $dups;
    }
    
    
    $arr = array(
        array(
            0 => 'A',
            1 => 'B',
        ),
        array(
            0 => 'A',
            1 => 'B',
        ),
        array(
            0 => 'C',
            1 => 'D',
        ),
        array(
            0 => 'C',
            1 => 'D',
        ),
        array(
            0 => 'E',
            1 => 'F',
        ),
        array(
            0 => 'F',
            1 => 'E',
        ),
        array(
            0 => 'Y',
            1 => 'Z',
        ),
    );
    
    var_export( return_dup( $arr ) );
    /*
    array (
        0 => array (
            0 => 'A',
            1 => 'B',
        ),
        1 => array (
            0 => 'C',
            1 => 'D',
        ),
    )
    */
    
    0 讨论(0)
  • 2020-12-05 23:21
    function array_dup($ar){
       return array_unique(array_diff_assoc($ar,array_unique($ar)));
    }
    

    Should do the trick.

    0 讨论(0)
  • 2020-12-05 23:22

    I have found another way to return duplicates in an array

    function printRepeating($arr, $size) 
    { 
        $i; 
        $j; 
        for($i = 0; $i < $size; $i++) 
            for($j = $i + 1; $j < $size; $j++) 
                if($arr[$i] == $arr[$j]) 
                    echo $arr[$i], " "; 
    }  
    
    
    
    printRepeating($array, sizeof($array,0);
    
    0 讨论(0)
  • 2020-12-05 23:23

    $duplicate_array = array();

      for($i=0;$i<count($array);$i++){
    
        for($j=0;$j<count($array);$j++){
    
          if($i != $j && $array[$i] == $array[$j]){
    
            if(!in_array($array[$j], $duplicate_array)){
    
              $duplicate_array[] = $array[$j];
    
            }
    
          }
    
        }    
    
      }
    
    0 讨论(0)
提交回复
热议问题