2016-11-28 5 views
0

Я хочу удалить дубликаты ключей из обоих массивов.Удалить дубликаты ключей из обоих массивов, используя php

Мой код

$arr1[22068] = array('ID' => 22068); 
$arr1[22067] = array('ID' => 22067); 
$arr2[22068] = array('ID' => 22068); 
$arr2[22066] = array('ID' => 22066); 

$arr = array_diff($arr1, $arr2); 

var_dump($arr); //It outputs null. 

Окончательный массив должен выглядеть this--

$arr[22066] = array('ID' => 22066); 
$arr[22067] = array('ID' => 22067); 

Любая помощь высоко ценится.

+1

Я берусь за 22068, но почему 22066? – Max

+0

Просьба уточнить вашу конкретную проблему или добавить дополнительные сведения, чтобы точно указать, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. См. Страницу [Как спросить] (https://stackoverflow.com/help/how-to-ask), чтобы помочь прояснить этот вопрос. –

+0

@CharlotteDunois Я обновил сообщение. Я хочу, чтобы ключ 22068 был удален из обоих массивов и создавал новый массив. –

ответ

2

array_diff_key() - это то, что вы хотите.

$arr1[22068] = array('ID' => 22068); 
$arr1[22067] = array('ID' => 22067); 
$arr2[22068] = array('ID' => 22068); 
$arr2[22066] = array('ID' => 22066); 

// Get elements of array 1 which are not present in array 2 
$unique_1 = array_diff_key($arr1, $arr2); 

// Get elements of array 2 which are not present in array 1 
$unique_2 = array_diff_key($arr2, $arr1); 

// Merge unique values 
$unique = $unique_1 + $unique_2; 
+2

вы должны использовать '$ unique = $ unique_1 + $ unique_2;' для сохранения оригинальных цифровых клавиш. 'array_merge' сбросит цифровые клавиши' 22067' и '22066' на' 0' и '1' – krlv

+0

Brilliant. Большое спасибо за решение и объяснение. –

+0

@krlv Спасибо, что указали это. Мне не хватало оригинального ключа. Теперь все в порядке. –

1

Так array_diff даст вам то, что по-другому в array1 против массив2, и не будет работать на многомерные массивы. Вы можете переключиться на array_key_diff, однако, вы будете работать в подобную проблему:

$arr1[22068] = array('ID' => 22068); 
$arr1[22067] = array('ID' => 22067); 
$arr2[22068] = array('ID' => 22068); 
$arr2[22066] = array('ID' => 22066); 

$arr = array_diff_key($arr1, $arr2); 

var_dump($arr); //It outputs array(1) {[22067]=> array(1) { ["ID"]=> int(22067) } } 

Я не в курсе решения «волшебного» с различиями, однако, у вас есть варианты, вы можете взять код выше и добавить дополнительную строку для:

$arr2 = array_diff_key($arr2, $arr1); 
var_dump($arr2) 

затем слейте $ обр и $ arr2, или вы можете просто написать цикл прохождения и сравнения каждого пункта. В зависимости от размера, объема, читаемости и т. Д. Будет зависеть от фактического набора

+0

Спасибо за вашу помощь. –

Смежные вопросы