[英]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.