2016-06-13 3 views
0

У меня есть массив массивов. Одно из полей внутри внутреннего массива должно быть уникальным, поэтому, когда я показываю результаты, он отображает только уникальные записи.Получить массив на основе уникальных значений в другом массиве?

array_unique доступен, но похоже, что он работает только на одноразмерных массивах. Я мог бы, вероятно, выполнить операцию сравнения во время итерации через массив, но это похоже на наименее эффективный способ сделать это.

То, как данные хранятся в базе данных (а не в моем дизайне), является сложным, и я не смогу просто получить отдельные результаты, используя sql.

Любые идеи?

+2

По крайней мере, дайте короткий пример структуры данных. –

+2

'foreach ($ items as $ item) $ unique [$ item ['theUniqueField']] = $ item;' – deceze

ответ

0

Вы можете легко использовать комбинацию array_unique и array_column

$records = array(
    array(
     'id' => 2135, 
     'first_name' => 'John', 
     'last_name' => 'Doe', 
    ), 
    array(
     'id' => 3245, 
     'first_name' => 'Sally', 
     'last_name' => 'Smith', 
    ) 
); 

$ids = array_column($records, 'id'); 
$unique_ids = array_unique($ids); 

, а затем фильтр, в котором когда-либо, как вы считаете нужным

array_filter($records, function($row) use ($unique_ids) { 
    return in_array($row['id'], $unique_ids); 
}); 

EDIT: фильтр фактически не работать сейчас что я думаю об этом, ниже представляет собой несколько иной подход:

array_filter($records, function($row) use ($unique_ids) { 
    $array_pos = array_search($row['id'], $unique_ids, true); 
    if($array_pos !== false) { 
     //need to remove it once used or it wont be unique 
     unset($unique_ids[$array_pos]); 
    } 
    return $array_pos !== false; 
}); 
Смежные вопросы