重复数据删除多维数组

时间:2011-07-07 20:17:22

标签: php arrays

我有一个PDO在查询后返回的多维数组,并且我有一些重复的结果。它们并非完全重复,但只有一个密钥是重复的。所以:

[0] => 
  'id' => 2,
  'test' => 'My test',
[1] => 
  'id' => 2,
  'test' => 'Another test',
[2] => 
  'id' => 3,
  'test' => 'My tests',

我想删除具有相同ID值的重复条目。我怎么能这样做?

3 个答案:

答案 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 ,则不应允许重复。