我有關聯數組像下面PHP:從assosciative數組中刪除重複的值,並返回包含所述重複值的關聯數組
$arr = [1=>0, 2=>1, 3=>1, 4=>2]
我想從初始陣列刪除重複的值並返回這些重複如一個新的陣列。所以我最終會得到類似的東西;
$arr = [1=>0, 4=>2]
$new_arr = [2=>1, 3=>1]
PHP是否提供這樣的功能,或者如果沒有,我會如何實現這一目標?
我有關聯數組像下面PHP:從assosciative數組中刪除重複的值,並返回包含所述重複值的關聯數組
$arr = [1=>0, 2=>1, 3=>1, 4=>2]
我想從初始陣列刪除重複的值並返回這些重複如一個新的陣列。所以我最終會得到類似的東西;
$arr = [1=>0, 4=>2]
$new_arr = [2=>1, 3=>1]
PHP是否提供這樣的功能,或者如果沒有,我會如何實現這一目標?
嘗試:
使用array_filter()
擺脫陣列
使用array_diff()
所有重複的值從陣列獲取所有唯一值
$array = array(1=>0, 2=>1, 3=>1, 4=>2);
$counts = array_count_values($array);
$duplicates = array_filter($array, function ($value) use ($counts) {
return $counts[$value] > 1;
});
print '<pre>';print_r($duplicates);
$result=array_diff($array,$duplicates);
print '<pre>';print_r($result);
輸出:
Array
(
[2] => 1
[3] => 1
)
Array
(
[1] => 0
[4] => 2
)
爲什麼OP要「試試這個」?一個好的答案***將總是解釋所做的事情以及爲什麼這樣做,不僅是爲了OP,還是爲了將來訪問SO。 –
你可以使用從數組中獲取唯一值然後比較array_diff_assoc
結果數組這將保持指標爲兩個數組,這裏有一個例子:
$arr = array(1=> 2, 2=>2, 3=>3);
print_r($arr);
$arr1 = array_unique($arr);
print_r($arr1);
$arr2 = array_diff_assoc($arr,$arr1);
print_r($arr2);
而結果:
Array
(
[1] => 2
[2] => 2
[3] => 3
)
Array
(
[1] => 2
[3] => 3
)
Array
(
[2] => 2
)
你想保存索引? – splash58
是的,其重要的是我保存索引 – DMcg
達摩的答案解決了我問的問題。然而,稍微提了一下,我發現我現在需要像這樣的結果'$ arr = [1 => 0,2 => 1,3 => 1,4 => 2,5 => 2,6 = > 3]' – DMcg