2015-11-21 3 views
1

У меня есть следующий массив в PHP:Удалить двойные записи из массива

[0] => Array(
    (
    [post_id] => 492, 
    [user_id] => 1 
) 
[1] => Array(
    (
    [post_id] => 501, 
    [user_id] => 1 
) 
[2] => Array(
    (
    [post_id] => 568, 
    [user_id] => 13 
) 
[3] => Array(
    (
    [post_id] => 897, 
    [user_id] => 13 
) 

То, что я хочу сделать, это удалить те, где уже существует user_id. Таким образом, результат должен выглядеть следующим образом:

[0] => Array(
    (
    [post_id] => 492, 
    [user_id] => 1 
) 
[1] => Array(
    (
    [post_id] => 568, 
    [user_id] => 13 
) 

мне нужен массив, в котором каждый user_id только существует один раз.

array_unique() не работает для этого примера. Есть идеи?

Спасибо!

+0

использовать итерацию, чтобы проверить его. Но зачем это нужно? –

+4

Возможный дубликат [Как удалить повторяющиеся значения из многомерного массива в PHP] (http://stackoverflow.com/questions/307674/how-to-remove-duplicate-values-from-a-multi-dimensional- array-in-php) – kodeart

+0

Мне нужно это, чтобы ограничить мои сообщения. Мне нужно только одно сообщение для каждого пользователя. – Brotzka

ответ

1

Вы можете перебрать и найти уникальные значения, как вы идете:

$exists = array(); 
foreach($items as $key => $item) { 
    if(!in_array($item['user_id'], $exists)) { 
     $exists[] = $item['user_id']; 
    } else { 
     unset($items[$key]); 
    } 
} 

Это будет дезактивировать все массивы, которые уже существуют в $exists массиве.

+0

Спасибо, это самое удобное решение для моей проблемы :) – Brotzka

0

Вот простую функцию для решения проблемы.

$array = Array(); 
$array[] = Array('post_id'=>492 , 'user_id' => '1'); 
$array[] = Array('post_id'=>501 , 'user_id' => '1'); 
$array[] = Array('post_id'=>568 , 'user_id' => '13'); 
$array[] = Array('post_id'=>897 , 'user_id' => '13'); 


print_r($array); 
print_r(make_unique_by_key($array,'user_id')); 
function make_unique_by_key($m_arr , $key) { 

    $tmp_arr = array(); 
    foreach ($m_arr as &$item) { 
     if (!isset($tmp_arr[$item[$key]])) { 
     $tmp_arr[$item[$key]] =& $item; 
     } 
    } 
    $ret_arr = array_values($tmp_arr); 
    return $ret_arr; 
} 
Смежные вопросы