Как удалить повторяющиеся значения из ассоциативного массива на основе определенного значения?

У меня есть массив, который выглядит так:

array(3) { ["fk_article_id"]=> string(1) "4" ["first_name"]=> string(6) "Ulrike" ["last_name"]=> string(10) "Grasberger" } array(3) { ["fk_article_id"]=> string(1) "9" ["first_name"]=> string(5) "Frank" ["last_name"]=> string(9) "Neubacher" } array(3) { ["fk_article_id"]=> string(3) "896" ["first_name"]=> string(2) "D." ["last_name"]=> string(5) "Bauer" } array(3) { ["fk_article_id"]=> string(3) "896" ["first_name"]=> string(2) "S." ["last_name"]=> string(6) "Anders" } array(3) { ["fk_article_id"]=> string(3) "896" ["first_name"]=> string(2) "M." ["last_name"]=> string(6) "Tsokos" } array(3) { ["fk_article_id"]=> string(3) "897" ["first_name"]=> string(8) "Reinhard" ["last_name"]=> string(8) "Scholzen" } 

Теперь я хочу избавиться от "fk_article_id" значений "896" "fk_article_id" "896" , так что "fk_article_id" только первый из них:

 array(3) { ["fk_article_id"]=> string(3) "896" ["first_name"]=> string(2) "D." ["last_name"]=> string(5) "Bauer" } 

Я теперь array_unique() но я не нашел возможности сказать функции использовать только значения в ID "fk_article_id" .

Как я могу это сделать?

Редактировать:

Это результат трех столбцов таблицы db через:

 $authors_result = pg_query($query_authors) or trigger_error("An error occurred.<br/>" . mysql_error() . "<br />SQL-Statements: {$searchSQL}"); while ($row = pg_fetch_assoc($authors_result)) { var_dump($row); } 

    Быстрый способ использования array_reduce будет выглядеть так:

     $unique = array_reduce($subject, function($final, $article){ static $seen = array(); if ( ! array_key_exists($article['fk_article_id'], $seen)) { $seen[$article['fk_article_id']] = NULL; $final[] = $article; } return $final; }); 

    Попробуйте рабочий пример .


    Изменить: Кажется, вы не хотите работать с агрегированными результатами. Вот еще две мысли:

    Фильтрация в PHP

     $seen = array(); while ($row = pg_fetch_assoc($authors_result)) { // Skip this row if we have already seen its article id if (array_key_exists($row['fk_article_id'], $seen)) { continue; } // Note that we have seen this article $seen[$row['fk_article_id']] = NULL; // Do whatever with your row var_dump($row); } 

    Фильтрация в БД

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

     foreach($array as $key => $value){ if(!in_array( $array[$key]['fk_article_id'], $usedValues)){ $usedValues = $array[$key]['fk_article_id']; $cleanArray = $array[$key]; } } 

    что-то вдоль линий Thoose должно это сделать, я не думаю, что существует предварительная функция массива для этого

    Один из способов – перебрать массив, скопировав собственный экземпляр каждого fk_article_id в новом массиве.

     <?php $your_unique_array = array(); foreach ($your_original_array as $v) { if (!isset($your_unique_array[$v['fk_article_id']) { $your_unique_array[$v['fk_article_id'] = $v; } } 

    Я бы использовал foreach-loop для перебора массивов и сохранения всех массивов, которые не имеют дубликата _id для нового массива.

     $clean = array(); foreach ($arrays as $array) { if (!isset($clean[$array['fk_article_id']]) $clean[$array['fk_article_id']] = $array; } 

    ** получить уникальный ассоциативный массив **, используя этот метод, вы можете легко получить уникальный ассоциативный массив / многомерный массив.

      array:6 [▼ 0 => array:1 [▼ 2 => "Airtel DTH" ] 1 => array:1 [▼ 2 => "Airtel DTH" ] 2 => array:1 [▼ 2 => "Airtel DTH" ] 3 => array:1 [▼ 3 => "NeuSoft PVT LMT" ] 4 => array:1 [▼ 3 => "NeuSoft PVT LMT" ] 5 => array:1 [▼ 3 => "NeuSoft PVT LMT" ] ] function assoc_Array_unique($array) { $result = array_map("unserialize", array_unique(array_map("serialize", $array))); foreach ($result as $key => $value) { if ( is_array($value) ) { $result[$key] = assoc_Array_unique($value); } } return $result; } $arr_Company= assoc_Array_unique($arr_Company); // get Unique Array $arr_Company = array_values($arr_Company); Rearrange Index of Array.