У меня есть 2 массива данных из разных источников данных в разных форматах, но они представляют одни и те же ресурсы. Таким образом, id
в одном - это то же, что и guid
.PHP-массив различных типов
В настоящее время я конвертирую один из массивов в соответствие друг с другом, а затем запускаю их через array_udiff
, чтобы получить разницу.
Однако мне нужно сравнить 3 свойства, чтобы проверить, соответствуют ли они, поэтому я не могу вернуть -1,0,1, поскольку 3 поля либо совпадают, либо не совпадают.
Если я просто возвращают -1 или 0, он работает по сравнению с $a
$b
, но терпит неудачу по сравнению с $b
$a
$arr_a = [['id'=>1, 'a'=>1, 'b'=>0],['id'=>2, 'a'=>2, 'b'=>3],['id'=>3, 'a'=>1, 'b'=>0]];
$arr_b = [['id'=>3, 'a'=>1, 'b'=>0],['id'=>4, 'a'=>2, 'b'=>3],['id'=>5, 'a'=>1, 'b'=>0]];
function diff($a, $b) {
if(($a['id'] == $b['id'])
&& ($a['a'] == $b['a'])
&& ($a['b'] == $b['b'])
) {
return 0;
} else {
return -1;
}
$not_in_b = array_udiff($arr_a, $arr_b,'diff');
$not_in_a = array_udiff($arr_b, $arr_a,'diff');
print_r($not_in_b);
print_r($not_in_a);
Вышеприведенные возвращается ...
Array
(
[0] => Array
(
[id] => 1
[a] => 1
[b] => 0
)
[1] => Array
(
[id] => 2
[a] => 2
[b] => 3
)
)
Array
(
[0] => Array
(
[id] => 3
[a] => 1
[b] => 0
)
[1] => Array
(
[id] => 4
[a] => 2
[b] => 3
)
[2] => Array
(
[id] => 5
[a] => 1
[b] => 0
)
)
Как вы можете видеть разность $a
до $b
работ, но $b
до $a
не ...
Как я могу сравнить несколько Воулс, как это равенство ...
UPDATE
Это работает, но делает два массива с тремя идентифицирующих значениями свойств в качестве ключей ...
$arr_a = [['id'=>1, 'a'=>1, 'b'=>0],['id'=>2, 'a'=>2, 'b'=>3],['id'=>3, 'a'=>1, 'b'=>0]];
$arr_b = [['id'=>3, 'a'=>1, 'b'=>0],['id'=>4, 'a'=>2, 'b'=>3],['id'=>5, 'a'=>1, 'b'=>0]];
$arra_a_keys=[];
foreach($arr_a as $item) {
$arra_a_keys[$item['id'].'_'.$item['a'].'_'.$item['b']] = $item;
}
$arra_b_keys=[];
foreach($arr_b as $item) {
$arra_b_keys[$item['id'].'_'.$item['a'].'_'.$item['b']] = $item;
}
$not_in_b = array_diff_key($arra_a_keys, $arra_b_keys);
$not_in_a = array_diff_key($arra_b_keys, $arra_a_keys);
print_r($not_in_b);
print_r($not_in_a);
«не работают». Покажите код, который вы пробовали, и укажите, в каком направлении он не работает. –
Какие элементы сравнивают критерии? только 'id' и' guid' должны совпадать? – sevavietl
@PatrickQ Я добавил пример с некоторыми подробностями ... –