2013-10-07 3 views
-3

Мне нужна помощь. У меня есть следующий массив:Удалить дубликат в массиве на основе значения столбца

$result = array(
    0 => array('a'=>1,'b'=>'data1'), 
    1 => array('a'=>2,'b'=>'data2'), 
    2 => array('a'=>1,'b'=>'data3'), 
); 

Я хочу, чтобы удалить повторяющиеся строки путем сравнения значений столбца «а». Ожидаемый результат должен быть:

array(
    0 => array('a'=>1,'b'=>'data1'), 
    1 => array('a'=>2,'b'=>'data2'), 
); 

Или:

array(
    1 => array('a'=>2,'b'=>'data2'), 
    2 => array('a'=>1,'b'=>'data3'), 
); 

Есть простой способ сделать это?

ответ

11

Вы можете создать небольшой массив из всех возможных значений поля a с помощью array_map(), захватить все уникальные значения из него с array_unique(), а затем пересекает ее с исходным массивом, используя array_intersect_key().

$output = array_intersect_key(
    $result, 
    array_unique(array_map(function($item) { 
     return $item['a']; 
    }, $result)) 
); 

Или, так как 5,5:

$output = array_intersect_key($result, array_unique(array_column($result, 'a'))); 
+0

Спасибо Джек. Оно работает. –

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