203

PHPの配列から重複した値を削除するにはどうすればよいですか?

4

26 に答える 26

325

array_unique()を使用します。

例:

$array = array(1, 2, 2, 3);
$array = array_unique($array); // Array is now (1, 2, 3)
于 2008-11-21T02:39:33.040 に答える
60

使用するarray_values(array_unique($array));

array_unique: 一意の配列 array_values用 : 再インデックス用

于 2017-02-15T13:49:33.147 に答える
31
//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 )
于 2011-12-06T11:23:46.753 に答える
16

The only thing which worked for me is:

$array = array_unique($array, SORT_REGULAR);

Edit : SORT_REGULAR keeps the same order of the original array.

于 2017-01-12T18:57:41.117 に答える
5

ユニークで重複したアイテムを取得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 */
于 2011-05-13T22:57:48.290 に答える
2

あなたの配列のサイズに応じて、私は見つけました

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

array_unique よりも高速になる可能性があります。

于 2016-07-25T01:57:36.860 に答える
2

これらを行うには、次のように複数の方法があります。

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

//second method
$array = array_unique($arr, SORT_REGULAR);
于 2018-06-05T08:33:32.307 に答える
2

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

これにより、キーの関連付けが処理され、結果の新しい配列のキーがシリアル化されます:-)

于 2010-08-18T12:41:25.453 に答える
1

それはそれを行う素晴らしい方法です。その出力が再び配列に戻っていることを確認したい場合があります。これで、最後の一意の値のみが表示されます。

これを試して:

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

foreach (array_unique($arrDuplicate) as $v){
  if($v != "") { $arrRemoved[] = $v; }
}
print_r ($arrRemoved);
于 2012-08-09T09:53:20.767 に答える
1

パフォーマンスに懸念があり、単純な配列がある場合は、次を使用します。

array_keys(array_flip($array));

array_unique より何倍も高速です。

于 2018-10-01T12:59:42.223 に答える
0
$arrDuplicate = array ("","",1,3,"",5);
 foreach(array_unique($arrDuplicate) as $v){
  if($v != "" ){$arrRemoved = $v;  }}
print_r($arrRemoved);
于 2011-11-14T09:09:27.740 に答える
0

この短くて甘いコードを試してください -

$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)
}
于 2014-04-01T09:47:00.943 に答える
-1
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;
}
于 2012-11-05T11:11:13.880 に答える
-2
$array = array("a" => "moon", "star", "b" => "moon", "star", "sky");

// Deleting the duplicate items
$result = array_unique($array);
print_r($result);

ref :デモ

于 2019-07-05T13:23:18.900 に答える
-3

関数を使用せずにこれを行いました。

$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>";
}
于 2010-03-07T17:31:45.737 に答える