Как удалить повторяющиеся значения из массива в PHP



Как я могу удалить повторяющиеся значения из массива в PHP?

1660   20  

20 ответов:

использовать array_unique ().

пример:

$array = array(1, 2, 2, 3);
$array = array_unique($array); // Array is now (1, 2, 3)
//Find duplicates 

$arr = array( 
    'unique', 
    'duplicate', 
    'distinct', 
    'justone', 
    'three3', 
    'duplicate', 
    'three3', 
    'three3', 
    'onlyone' 
);

$unique = array_unique($arr); 
$dupes = array_diff_key( $arr, $unique ); 
    // array( 5=>'duplicate', 6=>'three3' 7=>'three3' )

// count duplicates

array_count_values($dupes); // array( 'duplicate'=>1, 'three3'=>2 )

использовать array_values(array_unique($array));

array_unique: для уникального массива array_values: для переиндексации

иногда array_unique() - это не путь, если вы хотите получить уникальные и повторяющиеся элементы...

$unique=array("","A1","","A2","","A1","");
$duplicated=array();

foreach($unique as $k=>$v) {

if( ($kt=array_search($v,$unique))!==false and $k!=$kt )
 { unset($unique[$kt]);  $duplicated[]=$v; }

}

sort($unique); // optional
sort($duplicated); // optional

результаты

array ( 0 => '', 1 => 'A1', 2 => 'A2', ) /* $unique */

array ( 0 => '', 1 => '', 2 => '', 3 => 'A1', ) /* $duplicated */

единственное, что сработало для меня:

$array = array_unique($array, SORT_REGULAR);
$result = array();
foreach ($array as $key => $value){
  if(!in_array($value, $result))
    $result[$key]=$value;
}

explode(",", implode(",", array_unique(explode(",", $YOUR_ARRAY))));

Это позаботится о ключевых ассоциациях и сериализации ключей для результирующего нового массива : -)

мы можем создать такой тип массива, чтобы использовать это последнее значение будет обновляться в столбец или значение ключа и мы получим уникальное значение из массива...

$array = array (1,3,4,2,1,7,4,9,7,5,9);
    $data=array();
    foreach($array as $value ){

        $data[$value]= $value;

    }

    array_keys($data);
    OR
    array_values($data);

это отличный способ сделать это. Возможно, вы захотите убедиться, что его вывод снова является массивом. Теперь вы показываете только последнее уникальное значение.

попробуйте это:

$arrDuplicate = array ("","",1,3,"",5);

foreach (array_unique($arrDuplicate) as $v){
  if($v != "") { $arrRemoved[] = $v; }
}
print_r ($arrRemoved);

в зависимости от размера вашего массива, я нашел

$array = array_values( array_flip( array_flip( $array ) ) );

может быть быстрее, чем array_unique.

    if (@!in_array($classified->category,$arr)){        
                                    $arr[] = $classified->category;
                                 ?>

            <?php } endwhile; wp_reset_query(); ?>

первый раз проверить значение в массиве и найти такое же значение игнорировать его

удалить повторяющиеся значения из ассоциативного массива в PHP.

$arrDup = Array ('0' => 'aaa-aaa' , 'SKU' => 'aaa-aaa' , '1' => '12/1/1' , 'date' => '12/1/1' , '2' => '1.15' , 'cost' => '1.15' );

foreach($arrDup as $k =>  $v){
  if(!( isset ($hold[$v])))
      $hold[$v]=1;
  else
      unset($arrDup[$k]);
}

Array ([0] => aaa-aaa [1] => 12/1/1 [2] => 1.15 )

$arrDuplicate = array ("","",1,3,"",5);
 foreach(array_unique($arrDuplicate) as $v){
  if($v != "" ){$arrRemoved = $v;  }}
print_r($arrRemoved);
function arrayUnique($myArray)
{
    $newArray = Array();
    if (is_array($myArray))
    {
        foreach($myArray as $key=>$val)
        {
            if (is_array($val))
            {
                $val2 = arrayUnique($val);
            }
            else
            {
                $val2 = $val;
                $newArray=array_unique($myArray);
                $newArray=deleteEmpty($newArray);
                break;
            }
            if (!empty($val2))
            {
                $newArray[$key] = $val2;
            }
        }
    }
    return ($newArray);
}

function deleteEmpty($myArray)
{
    $retArray= Array();
    foreach($myArray as $key=>$val)
    {
        if (($key<>"") && ($val<>""))
        {
            $retArray[$key] = $val;
        }
    }
    return $retArray;
}

попробуйте этот короткий и сладкий код -

$array = array (1,4,2,1,7,4,9,7,5,9);
$unique = array();

foreach($array as $v){
  isset($k[$v]) || ($k[$v]=1) && $unique[] = $v;
  }

var_dump($unique);

выход -

array(6) {
  [0]=>
  int(1)
  [1]=>
  int(4)
  [2]=>
  int(2)
  [3]=>
  int(7)
  [4]=>
  int(9)
  [5]=>
  int(5)
}

Это можно сделать через функцию я сделал три дубликата функция возвращает значения, повторяющиеся в массиве .вторая функция single возвращает только те значения, которые не повторяются в массиве, а третья и полная функция возвращают все значения, но не дублируются, если какое-либо значение дублируется, оно преобразует его в single

function duplicate($arr){
    $duplicate;
    $count=array_count_values($arr);
    foreach($arr as $key=>$value){
        if($count[$value]>1){
            $duplicate[$value]=$value;
        }

    }
    return $duplicate;

}
function single($arr){
    $single;
    $count=array_count_values($arr);
    foreach($arr as $key=>$value){
        if($count[$value]==1){
            $single[$value]=$value;
        }
    }
    return $single;
}
function full($arr,$arry){
    $full=$arr+$arry;
    sort($full);
    return $full;

}

}

<?php
$arr1 = [1,1,2,3,4,5,6,3,1,3,5,3,20];    
print_r(arr_unique($arr1));


function arr_unique($arr) {
  sort($arr);
  $curr = $arr[0];
  $uni_arr[] = $arr[0];
  for($i=0; $i<count($arr);$i++){
      if($curr != $arr[$i]) {
        $uni_arr[] = $arr[$i];
        $curr = $arr[$i];
      }
  }
  return $uni_arr;
}

существует несколько способов сделать это, которые заключаются в следующем

//first method
$filter = array_map("unserialize", array_unique(array_map("serialize", $arr)));

//second method
$array = array_unique($arr, SORT_REGULAR);

Если вы относитесь к производительности и простого массива, использовать:

array_keys(array_flip($array));

Это во много раз быстрее, чем array_unique.

Я сделал это без использования какой-либо функции.

$arr = array("1", "2", "3", "4", "5", "4", "2", "1");

$len = count($arr);
for ($i = 0; $i < $len; $i++) {
  $temp = $arr[$i];
  $j = $i;
  for ($k = 0; $k < $len; $k++) {
    if ($k != $j) {
      if ($temp == $arr[$k]) {
        echo $temp."<br>";
        $arr[$k]=" ";
      }
    }
  }
}

for ($i = 0; $i < $len; $i++) {
  echo $arr[$i] . " <br><br>";
}

Comments

    Ничего не найдено.