我有一个PDO在查询后返回的多维数组,并且我有一些重复的结果。它们并非完全重复,但只有一个密钥是重复的。所以:
[0] =>
'id' => 2,
'test' => 'My test',
[1] =>
'id' => 2,
'test' => 'Another test',
[2] =>
'id' => 3,
'test' => 'My tests',
我想删除具有相同ID值的重复条目。我怎么能这样做?
答案 0 :(得分:1)
多行数组的唯一递归数组
<?php
function super_unique($array)
{
$result = array_map("unserialize", array_unique(array_map("serialize", $array)));
foreach ($result as $key => $value)
{
if ( is_array($value) )
{
$result[$key] = super_unique($value);
}
}
return $result;
}
?>
答案 1 :(得分:0)
您可以使用PDO结果创建一个新数组...
$newArray = array(); foreach ($pdoArray AS $result) { if (isset($newArray[$result['id']])) { continue; } $newArray[$result['id']] = $result['test']; }
这样做会将内容添加到新数组中,其中id为新数组的键。如果它找到一个具有相同键的数组,它只是跳过它。
这是一个简单的答案,您可能需要检查以确保您获得正确的值(您想要保留两个ID中的哪一个?)
或者,如果您不想保留其中任何一个,请构建数组,但除了执行continue;
之外,您还可以将id添加到新数组(删除数组)。然后,一旦第一个循环完成,循环通过删除数组并删除键:
$newArray = array(); $delete = array(); foreach ($pdoArray AS $result) { if (isset($newArray[$result['id']])) { $delete[] = $result['id']; continue; } $newArray[$result['id']] = $result['test']; } foreach ($delete AS $del) { unset($newArray[$del]); }
或者您可以将ID添加到删除数组键(而不是值),然后执行array_diff_key()。
但是,在我看来,你需要重新思考你的数据库结构......为什么你有重复的ID?
答案 2 :(得分:0)
将您的查询更改为使用GROUP BY id
但一般情况下,如果是 id
,则不应允许重复。