php - 如何根据特定值从关联数组中删除重复值?

标签 php arrays unique associative

我有一个看起来像这样的数组:

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",这样只留下第一个:

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

我现在array_unique(),但我还没有找到告诉函数仅使用“fk_article_id” ID中的值的可能性。

我该怎么做?

编辑:

这是三列数据库表的输出:

$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;
});

尝试a working example .


编辑:您似乎不想使用汇总结果。这里还有另外两个想法:

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);
}

数据库中的过滤

这里的想法是更改正在执行的查询,以便重复的文章 ID 不会出现在结果集中。如何完成此操作取决于您已经使用的查询。

关于php - 如何根据特定值从关联数组中删除重复值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3767318/

相关文章:

javascript - 如何使用 Javascript 获取多个输入字段的值

python - Matplotlib 3D 震源图,从 .txt 文件中读取 xyz 值

sql - 对特定文本的唯一约束

带条件的 MySQL 唯一索引

android - SQLite 创建具有唯一列组合的表

javascript确认向get/post添加参数

php - MySQL DB 查询与 PHP 变量的比较

php - 用于匹配字符串单词的正则表达式模式

c - 学习 'Linked lists' 的速度太快,但又不太熟悉指针? #C语言初学者

javascript - 使用 Javascript 将 HTML 页面中的默认可见性从可见更改为隐藏