我想要比较两个阵列,最终结合一个阵列,一切都结合在一起,没有重复。有人可以告诉我应该使用哪个功能?有这么多,有点令人困惑。
$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,没有重复项。
答案 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)
答案 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;
}