array_diff有计算
array_diff with calculation
请考虑以下数组:
$reference = array(
'080604' => 4,
'080703' => 4,
'080734' => 2,
'080819' => 2,
'088341' => 2,
'805238' => 20,
'805283' => 4,
'805290' => 2,
'805849' => 2,
'806051' => 2,
'806068' => 2,
);
$test = array(
'080604' => 2,
'080703' => 4,
'080819' => 1,
'088341' => 2,
'805238' => 20,
'805283' => 4,
'805290' => 2,
'805849' => 2,
'806051' => 2,
'806068' => 2,
);
它们非常相似,但也有一些不同之处,例如有可能:
- $reference 的某些键根本不存在于 $test 中
- $test 的某些键根本不存在于 $reference 中
- 所有键都存在,但 $reference 和 $test 中的值不同(有时 $reference 值大于 $test,有时 $test 值大于 $reference)
我需要自动找出差异并以某种方式输出它们,不仅是计数本身的差异,而且还提供了描述,例如
$result = [
'080604' => [
'reference' => 4,
'test' => 2
]
];
如果某个值仅在其中一个列表中:
$result = [
'1234567890' => [
'reference' => 0,
'test' => 2
]
];
或类似的东西。
有没有人有想法,以优雅的方式完成此任务的最佳方式是什么?非常感谢!
遍历每个并用值填充数组(如果存在):
$combined = [];
foreach ($reference as $key => $val) {
$combined[$key] = [
'test' => 0,
'reference' => $val,
];
}
foreach ($test as $key => $val) {
if (!isset($combined[$key])) {
$combined[$key] = [
'reference' => 0,
'test' => 0,
]
}
$combined[$key]['test'] = $val;
}
$combined
将包含两个数组中的两个值,同时引用 $reference
和 $test
.
中的元素
尝试
$result = array_diff($reference, $test);
print_r($result)
请考虑以下数组:
$reference = array(
'080604' => 4,
'080703' => 4,
'080734' => 2,
'080819' => 2,
'088341' => 2,
'805238' => 20,
'805283' => 4,
'805290' => 2,
'805849' => 2,
'806051' => 2,
'806068' => 2,
);
$test = array(
'080604' => 2,
'080703' => 4,
'080819' => 1,
'088341' => 2,
'805238' => 20,
'805283' => 4,
'805290' => 2,
'805849' => 2,
'806051' => 2,
'806068' => 2,
);
它们非常相似,但也有一些不同之处,例如有可能: - $reference 的某些键根本不存在于 $test 中 - $test 的某些键根本不存在于 $reference 中 - 所有键都存在,但 $reference 和 $test 中的值不同(有时 $reference 值大于 $test,有时 $test 值大于 $reference)
我需要自动找出差异并以某种方式输出它们,不仅是计数本身的差异,而且还提供了描述,例如
$result = [
'080604' => [
'reference' => 4,
'test' => 2
]
];
如果某个值仅在其中一个列表中:
$result = [
'1234567890' => [
'reference' => 0,
'test' => 2
]
];
或类似的东西。
有没有人有想法,以优雅的方式完成此任务的最佳方式是什么?非常感谢!
遍历每个并用值填充数组(如果存在):
$combined = [];
foreach ($reference as $key => $val) {
$combined[$key] = [
'test' => 0,
'reference' => $val,
];
}
foreach ($test as $key => $val) {
if (!isset($combined[$key])) {
$combined[$key] = [
'reference' => 0,
'test' => 0,
]
}
$combined[$key]['test'] = $val;
}
$combined
将包含两个数组中的两个值,同时引用 $reference
和 $test
.
尝试
$result = array_diff($reference, $test);
print_r($result)