2016-11-10 3 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_values и array_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

Вы правы, я проделал несколько тестов и нашел, что другой ответ не подходит для этой задачи. –

Смежные вопросы