2016-11-10 37 views
2

我試圖找到數組的第二維值是相同的,所以我可以處理它們。在多維數組中查找重複值

我已經看了array_unique,誰問過類似的問題其他人,但他們都刪除值,而不是返回他們的。

說我有一個這樣的數組:

array(
    [0] => array(
     [laps] => 7, 
     [corrected_time] => 18 
    ), 
    [1] => array(
     [laps] => 6, 
     [corrected_time] => 18 
    ), 
    [2] => array(
     [laps] => 7, 
     [corrected_time] => 18.5 
    ) 
) 

我想擁有它返回:array(0,1),因爲它們都具有corrected time

+0

等待得到他們。只有在'corrected_time'重複時才抓住它? – Jay

+1

'array_unique'如何刪除重複,然後'array_diff'去除值? –

+0

@Jay是的,對不起,不使這個不清楚,我已經更新了問題 –

回答

2

相同的值這是一種方法。首先獲取corrected_time的值並將它們轉換爲字符串(因爲我們將在array_count_values中使用它們,它僅適用於整數和字符串)。

$times = array_map('strval', array_column($your_array, 'corrected_time')); 

然後找出所有出現不止一次使用array_count_valuesarray_filter更多的價值。

$repeats = array_filter(array_count_values($times), function($time) { 
    return $time > 1; 
}); 

後你有多次重複這個列表,您可以use它原來的數組進行過濾,只包括與重複次數的項目。

$multiples = array_filter($your_array, function($item) use ($repeats){ 
    return isset($repeats[(string) $item['corrected_time']]); 
}); 

您可以在這個迭代,或者如果你只是想的鑰匙,你可以用

$keys = array_keys($multiples); 
+0

這似乎是一個很多比 –

+0

你有一個較大的設定值的測試對方的回答對方的回答更爲複雜,看看它是否真的做了什麼你需要它?在我看來,它只是巧合適用於你的問題的例子。 –

+0

你是對的,我已經做了一些測試,發現其他答案沒有適當地完成任務。 –