Как удалить повторяющиеся значения из массива в PHP - PullRequest
138 голосов
/ 21 ноября 2008

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

Ответы [ 22 ]

1 голос
/ 10 апреля 2019
$a = array(1, 2, 3, 4); 
$b = array(1, 6, 5, 2, 9); 
$c = array_merge($a, $b);
$unique = array_keys(array_flip($c));
print_r($unique);
1 голос
/ 05 июня 2018

Может быть несколько способов сделать это, а именно:

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

//second method
$array = array_unique($arr, SORT_REGULAR);
1 голос
/ 01 октября 2018

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

array_keys(array_flip($array));

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

1 голос
/ 12 февраля 2018

Удалите повторяющиеся значения из ассоциативного массива в 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)

1 голос
/ 15 июня 2017
    if (@!in_array($classified->category,$arr)){        
                                    $arr[] = $classified->category;
                                 ?>

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

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

0 голосов
/ 14 ноября 2011
$arrDuplicate = array ("","",1,3,"",5);
 foreach(array_unique($arrDuplicate) as $v){
  if($v != "" ){$arrRemoved = $v;  }}
print_r($arrRemoved);
0 голосов
/ 04 декабря 2018

Здесь я создал второй пустой массив и использовал цикл for с первым массивом, в котором есть дубликаты. Он будет работать столько же времени, сколько и счетчик первого массива. Затем сравнивается с позицией массива с первым массивом и сопоставляется с тем, что у него уже есть этот элемент, с помощью in_array Если нет, то он добавит этот элемент во второй массив с array_push.

$a = array(1,2,3,1,3,4,5);
$count = count($a);
$b = [];
for($i=0; $i<$count; $i++){
    if(!in_array($a[$i], $b)){
        array_push($b, $a[$i]);
    }
}
print_r ($b);
0 голосов
/ 05 ноября 2012
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;
}
0 голосов
/ 01 апреля 2014

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

$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)
}
0 голосов
/ 27 июля 2015

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

Вторая функция 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;
}
...