Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何比较数组并提取差异?_Php - Fatal编程技术网

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

Php 如何比较数组并提取差异?,php,Php,我有两个数组,我想比较一下,最终得到一个数组,所有的东西都组合在一起,没有重复项。有人能告诉我应该使用哪个功能吗?太多了,有点让人困惑 $array1[]['name'] = 'Kim, Jones'; $array1[]['name'] = 'Jim, Miller'; array1是我构建的一个数组,我希望将它添加到来自数据库的数组中。第二个数组中的键也被命名为“name”。谢谢 编辑: 我设法合并了这两个数组,但仍然可以看到重复的数组 这是第一个阵列的外观: Array ( [0

我有两个数组,我想比较一下,最终得到一个数组,所有的东西都组合在一起,没有重复项。有人能告诉我应该使用哪个功能吗?太多了,有点让人困惑

$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';
$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);
我只想将$add_names添加到第一个没有重复项的数组中。

php的array_diff()是否满足您的要求

或更可能的阵列差异关联:

对你有用吗

Description

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

我认为您需要使用(将两个数组相加)和(删除重复值)的组合

请注意,
array\u unique
在使用多维数组时无法正常工作,因此,如果数组数据看起来与您在问题中所用的方式相同,则必须考虑一种解决方法。建议对所有数组值进行序列化,然后在其上运行array\u unique。之后,只需在所有数组元素上运行
取消序列化
。注意,如果你有一个大数组,这可能意味着一个性能命中,所以你可能想考虑在这个场景中避免多维数组。 大概是这样的:

$add_names[]['Name']='Jim, Jones';
$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);

我很想向您介绍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);

这段代码适合我…

没有一个直接的函数来处理您在php中寻找的内容,可能您需要为它编写一个函数

我从您的问题中了解到,您有两个数组:

$a = array( array( 'name' => 'Omid' ), 12 );
$b = array( array( 'name' => 'testing' ) );
你想把它们合并在一起

$merge = array( array( 'name' => 'testing' ), 12 );
如果这正是您想要的,那么您可能需要查看此注释,它将导致以下代码:

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

嗨,普里特,谢谢你的帮助。我不知道如何使用array_diff,因为我在两个数组上使用了array_merge,只剩下一个数组。我将使用什么作为第二个数组来获取差异?在结果数组中您期望得到什么?你能给我举个例子吗?这是一个非嵌套数组吗?谢谢Aistina,但这给了我数组中的第一项,没有其他内容。我刚刚刷新,现在看到了你添加的注释。我在数组中只有100个项目。我数据库中的第一个数组有多个键值对,但我只关心名称值,并已构建第二个数组进行匹配。谢谢Aistina。让我们试一试,我会马上回来,让你知道它是怎么回事。艾斯蒂娜,我仍然得到组合数组,但我有重复的。有办法摆脱这些吗?嗨,杜尔塔兹。我现在要试试看。非常感谢!我也在考虑使用foreach进行比较。布莱比·杜尔塔兹。非常感谢!!效果很好。再次感谢你!嗨,愤世嫉俗者。谢谢你的代码片段。我要试试这个。马上回来