从多维数组中删除重复值

在这个函数中,我正在过滤我的数据库输出。我不知道如何只获得唯一值。我的阵列:

[2] => Array (
    [name] => John
    [id] => D
    )
[4] => Array (
    [name] => Grace
    [id] => K
    )
[6] => Array (
    [name] => John
    [id] => U
    )

现在我想要一个新数组,它必须只包含第一个“John”和“Grace”,因为它们是“唯一的”。我试过什么?

array_unique($filtredrow, "name");

但是在该功能之后,我只收到姓名,而且我还必须获得独特人物的 ID。

谢谢你的帮助!

编辑这是我想得到的:

[2] => Array (
        [name] => John
        [id] => D
        )
    [4] => Array (
        [name] => Grace
        [id] => K
        )

我的加载数据中我试图不保存已经在数组中的元素。

$rows=$mydb->get_resoults("SELECT DISTINCT name, id FROM DB", ARRAY_A);
foreach($rows as $key=>$row)
    {
        if($row[name]!=null && $row[id]!=null)
        {
            if($filtredrow[$key][name]!=$row[name])
            {
                $filtredrow[$key][name]=$row[name];
                $filtredrow[$key][id]=$row[id];
            }
        }
    }

但它保存所有值:/也重复

不要惊慌

我会把它放在开头,因为如果可能的话,我宁愿在数据库中做这种类型的事情。您可以更改查询以获得您想要的结果。

SELECT name, MIN(id) FROM your_table GROUP BY name

如果出于其他原因需要在 PHP 中执行此操作,这里有几种不同的方法。

所有这些都涉及使用名称作为键将行分配给结果数组。

如果要保留每个名称的第一个实例,则在迭代输入数组时,如果结果数组中存在与行名称匹配的键,请不要添加它。这样,您最终会在结果集中得到此人姓名的第一个实例。

foreach ($your_array as $person) {
    if (!isset($unique[$person['name']]) {
        $unique[$person['name']] = $person;
    }
}
$unique = array_values($unique);

如果您获得哪个 ID 无关紧要,那么您可以省略isset支票。这样,您将在结果集中得到每个人姓名的最后一个实例,因为每次遇到重复项时该键都会被覆盖。

foreach ($your_array as $person) {
    $unique[$person['name']] = $person;
}
$unique = array_values($unique);

如果您需要保留与名称关联的所有 id,请将 id 值附加到名称键下的数组中,而不是添加整行。

foreach ($your_array as $person) {
    $people[$person['name']][] = $person['id];
}

这会给你一个结果

['John' => ['D', 'U'], 'Grace' => ['K']];

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章