簡體   English   中英

在PHP中刪除關聯數組的重復元素

[英]Remove duplicated elements of associative array in PHP

$result = array(
    0=>array('a'=>1,'b'=>'Hello'),
    1=>array('a'=>1,'b'=>'other'),
    2=>array('a'=>1,'b'=>'other'),
);

如果重復刪除它,結果如下:

$result = array(
    0=>array('a'=>1,'b'=>'Hello'),
    1=>array('a'=>1,'b'=>'other')   
);

有誰知道這樣做?

謝謝

無論其他人在這里提供什么,您正在尋找一個名為array_unique Docs的函數。 這里重要的是將第二個參數設置為SORT_REGULAR ,然后工作很簡單:

array_unique($result, SORT_REGULAR);

SORT_REGULAR標志的含義是:

正常比較項目(不要更改類型)

這就是你想要的。 您想在此處比較數組文檔 ,並且不要將其類型更改為字符串(如果未設置參數,則默認為默認值)。

array_unique進行嚴格的比較(在PHP中為=== ),對於數組,這意味着:

$a === $b如果$ a和$ b具有相同順序和相同類型的相同鍵/值對, $a === $b TRUE

輸出( 演示 ):

Array
(
    [0] => Array
        (
            [a] => 1
            [b] => Hello
        )

    [1] => Array
        (
            [a] => 1
            [b] => other
        )
)

首先,你不能使用plain array_unique來解決這個問題,因為array_unique在內部將數組項視為字符串,這就是為什么在使用array_unique時會出現“無法將數組轉換為字符串”的注意事項。

試試這個:

$result = array(
    0=>array('a'=>1,'b'=>'Hello'),
    1=>array('a'=>1,'b'=>'other'),
    2=>array('a'=>1,'b'=>'other')
);

$unique = array_map("unserialize", array_unique(array_map("serialize", $result)));

print_r($unique);

結果:

Array
(
    [0] => Array
        (
            [a] => 1
            [b] => Hello
        )

    [1] => Array
        (
            [a] => 1
            [b] => other
        )

)

序列化對於這些問題非常方便。

如果您覺得這對您來說太神奇了,請查看此博文

function array_multi_unique($multiArray){

  $uniqueArray = array();

  foreach($multiArray as $subArray){

    if(!in_array($subArray, $uniqueArray)){
      $uniqueArray[] = $subArray;
    }
  }
  return $uniqueArray;
}

$unique = array_multi_unique($result);

print_r($unique);

具有諷刺意味的是, in_array適用於數組,其中array_unique不支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM