如何比较数组并提取差异?

时间:2009-09-08 20:04:34

标签: php

我想要比较两个阵列,最终结合一个阵列,一切都结合在一起,没有重复。有人可以告诉我应该使用哪个功能?有这么多,有点令人困惑。

$array1[]['name'] = 'Kim, Jones';
$array1[]['name'] = 'Jim, Miller';

array1是我构建的一个数组,我希望将其添加到来自数据库的数组中。第二个数组中的键也被命名为“name”。感谢。

编辑:

我设法合并这两个数组,但我仍然可以看到重复数据。

这是第一个数组的样子:

Array
(
    [0] => Array
        (
            [WNumber] => ADMIN
            [Name] => Tim, Cooley
            [Employer] => CalPERS
            [Student] => 1
            [Perm] => 1
            [QA] => 0
            [Supervisor] => 1
            [RQW] => 0
        )

我的第二个数组是这样构建的:

$add_names[]['Name']='Jim, Jones';

我只想将$ add_names添加到第一个数组WHERE,没有重复项。

5 个答案:

答案 0 :(得分:1)

我认为您需要结合使用array_merge(将两个数组加在一起)和array_unique(删除重复值)。

$resulting_array = array_unique(array_merge($array1, $array2));

请注意,array_unique在使用多维数组时无法正常工作,因此,如果您的数组数据看起来与您的问题相符,那么您将不得不考虑解决方法。 One of the comments on the array_unique page在运行array_unique之前建议serialize所有数组值。之后,您只需对所有数组元素运行unserialize。请注意,如果您有一个大数组,这可能意味着性能受到影响,因此您可能需要考虑避免在这种情况下使用多维数组。

这样的事情:

$merged_array = array_merge($array1, $array2);
$serialized_array = array_map("serialize", $merged_array);
$filtered_array = array_unique($serialized_array);
$final_array = array_map("unserialize", $filtered_array);

答案 1 :(得分:1)

我很想在CakePHP上卖给你,因为它有许多功能可以让它在“Set”类中变得简单。您的问题是您将结果放在嵌套数组中。一个简单的“array_unique”在嵌套数组中不起作用。

我是用老式的方式做的......

$array1[]['name'] = 'Kim, Jones';
$array1[]['name'] = 'Jim, Miller';

$array2[]['name'] = 'Kim, Jones';
$array2[]['name'] = 'Jimbo, Miller';
$array2[]['name'] = 'Jim, Jones';

$new_array=array_merge($array1, $array2);
$out_array = array();
$key_array = array();
foreach($new_array as $i => $row) {
        if (empty($key_array[$row['name']])) {
                $out_array[] = $row;
        }
        $key_array[$row['name']] = 1;
}

print_r($out_array);

此代码适用于我......

答案 2 :(得分:0)

php的array_diff()能做你想做的吗?

http://us.php.net/manual/en/function.array-diff.php

或更可能是array_diff_assoc:

http://us.php.net/manual/en/function.array-diff-assoc.php

答案 3 :(得分:0)

array_diff是否适合您?

Description

array array_diff ( array $array1 , array $array2 [, array $ ... ] )
Compares array1 against array2 and returns the difference.

答案 4 :(得分:0)

没有直接的功能来处理你在php中寻找的东西,可能你需要为它编写一个函数。

我从你的问题中了解到你有2个数组:

$a = array( array( 'name' => 'Omid' ), 12 );
$b = array( array( 'name' => 'testing' ) );

并且您希望合并它们以获取

$merge = array( array( 'name' => 'testing' ), 12 );

如果这就是你想要的,那么你可能想看一下导致这段代码的评论array merge recursive

function array_merge_recursive_distinct ( array &$array1, array &$array2 )
{
  $merged = $array1;

  foreach ( $array2 as $key => &$value )
  {
    if ( is_array ( $value ) && isset ( $merged [$key] ) && is_array ( $merged [$key] )     )
    {
      $merged [$key] = array_merge_recursive_distinct ( $merged [$key], $value );
    }
    else
    {
      $merged [$key] = $value;
    }
  }

  return $merged;
}