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进行比较。布莱比·杜尔塔兹。非常感谢!!效果很好。再次感谢你!嗨,愤世嫉俗者。谢谢你的代码片段。我要试试这个。马上回来