2016-08-17 92 views
4

我的數組:數組基於第一個值唯一嗎?

$arr = [['abc', 'a'],['xyz', 'f'],['abc', 'x']]; 

我需要刪除任何重複的第一個值,例如。有兩個ABC值以上,array_unique不會爲第二值不同的工作:

$arr = array_unique($arr, SORT_REGULAR); 

有沒有辦法讓只有基於第一值唯一值。我不能改變上述結構。

所需的輸出是:

$arr = [['abc', 'a'],['xyz', 'f']]; 
+0

什麼是期望的輸出? –

+0

更新了所需輸出的問題。 – panthro

+0

*我需要刪除任何重複的第一個值*。但期望的輸出是刪除最後一個。 –

回答

5

array_combine()array_column() &可以幫助。但它會改變嵌套數組的順序,並且只保留重複值的最後一個值。

$arr = [['abc', 'a'],['xyz', 'f'],['abc', 'x']]; 
$temp = array_combine(array_column($arr, 0), $arr); 

array_column不適用於舊版本。 (提供(PHP 5> = 5.5.0,PHP 7)

輸出

array(2) { 
    ["abc"]=> 
    array(2) { 
    [0]=> 
    string(3) "abc" 
    [1]=> 
    string(1) "x" 
    } 
    ["xyz"]=> 
    array(2) { 
    [0]=> 
    string(3) "xyz" 
    [1]=> 
    string(1) "f" 
    } 
} 

array_column將與來自子陣列的所有值與0索引返回數組。

array_combine將分配子陣列到由array_column返回的值。

因此,如果同一個鍵不能存在兩次,它將用相同的鍵(對於0)用較新的值覆蓋以前的值。因此新陣列將僅保存最新(最後一個)值。

+0

這很好,你能解釋一下array_column和array_combine在做什麼嗎? – panthro

+0

@panthro,添加了關於它在做什麼的簡要說明。 Allso添加了文檔鏈接。希望它會有所幫助。 –

+0

這是非常有用的,不幸的是,它確實會改變數組的結構,無論如何要將它恢復到組合後的相同結構?例如刪除鍵名 – panthro