Поиск уникальных значений в двумерном ассоциативном массиве
Иногда разум и программерский код заводят проект в такие дебри, что потом не знаешь как из них выбраться. Бывает необходимо вернуть ассоциативный двумерный массив уникальных значений из … правильно, из такого же большого двумерного ассоциативного массива содержащим дублирующие записи. Хотя эта фукнция сработает и для обычных двумерных массивов.
/** возвращает массив уникальных значений в двумерном ассоциативном массиве
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $array - массив $row_element - название поля, по которому искать уникальные значения */ function remove_dups($array, $row_element) { $new_array[0] = $array[0]; foreach ($array as $current) { $add_flag = 1; foreach ($new_array as $tmp) { if ($current[$row_element]==$tmp[$row_element]) { $add_flag = 0; break; } } if ($add_flag) $new_array[] = $current; } return $new_array; } |
Покажу на примерах, как это работает.
Имеем массив:
1 2 3 4 | $array[0] = array('city'=>'Москва','street'=>'Орджоникидзе'); $array[1] = array('city'=>'Самара','street'=>'Ленина'); $array[2] = array('city'=>'Москва','street'=>'Мира'); $array[3] = array('city'=>'Питер','street'=>'Ленина'); |
Найдем в нем уникальные записи с ключом 'city'
1 | $array2 = remove_dups($array, 'city'); |
Результат выполнения
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | array(3) {
[0]=>
array(2) {
["city"]=> string(6) "Москва"
["street"]=> string(12) "Орджоникидзе"
}
[1]=>
array(2) {
["city"]=> string(6) "Самара"
["street"]=> string(6) "Ленина"
}
[2]=>
array(2) {
["city"]=> string(5) "Питер"
["street"]=> string(6) "Ленина"
}
} |
Или же отсортируем по второму ключу ассоциативного массива 'street' и получим такой результат
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | array(3) {
[0]=>
array(2) {
["city"]=> string(6) "Москва"
["street"]=> string(12) "Орджоникидзе"
}
[1]=>
array(2) {
["city"]=> string(6) "Самара"
["street"]=> string(6) "Ленина"
}
[2]=>
array(2) {
["city"]=> string(6) "Москва"
["street"]=> string(4) "Мира"
}
} |
Если у Вас не ассоциативные, а обычные двумерные массивы, то вместо названия ключа нужно будет писать его номер.
В свое время это решение я нашел на php.net.


