我有 2 个数组,如下所示:
array(2) { ["2018-05"]=> string(2) "15" ["2018-06"]=> string(3) "100" }
array(1) { ["2018-05"]=> string(1) "5" }
我希望进行计算以找到差异,以便它将返回:
array(2) { ["2018-05"]=> string(2) "10" ["2018-06"]=> string(3) "100" }
由于这是一个多维数组,我不确定如何将"年月"显示为数组键,有人可以启发我吗?
谢谢。
试试这段代码
$a = ["2018-05"=> "15", "2018-06"=> "100" ];
$b = ["2018-05"=> "5"];
$c = $a;
foreach($b as $k=> $i){
if(array_key_exists($k,$c)){
$c[$k] = $a[$k] - $b[$k];
}
else{
$c[$k] = 0-$i;
}
}
假设您不想考虑相同的值并且想要绝对值,这应该有效
$els[]["2018-05"]="15";
$els[]["2018-06"]="100";
$els[]["2018-05"]="5" ;
$els[]["2018-05"]="1" ;//added
$els[]["2018-06"]="50";//added
$newEls = [];
foreach($els as $key => $el){
$newEls[key($el)] = $el[key($el)];
foreach($els as $key2 => $el2){
if(key($els[$key]) == key($els[$key2]) && $els[$key][key($els[$key])] != $els[$key2][key($els[$key2])]){
$newEls[key($el)] = abs($els[$key][key($els[$key])] - $els[$key2][key($els[$key2])]);
}
}
}
echo "<pre>";print_r($newEls);
如果你想保持相同的值,如[0]["2018-05"]="15"
和[1]["2018-05"]="15"
,则需要另一种方法。因为也许最好的方法是使用队列。
<?php
$a = ['2018-05'=> '15', '2018-06'=> '100'];
$b = ['2018-05'=> '5'];
$years = array_map(NULL, $a, $b);
$years = array_combine(array_keys($a), $years);
$differences = array_map(function ($year_diffs) : float {
// Did we get a pair to compare?
$has_diff = isset($year_diffs[0]) and isset($year_diffs[1]);
// If we got a pair then compare, else assume we got one.
$diff = $has_diff ? abs($year_diffs[0] - $year_diffs[1]) : $year_diffs[0];
return $diff;
}, $years);
var_dump($differences);
https://3v4l.org/BSEui
我不得不假设一些事情
- $a将始终包含主键
- 两个数组都包含彼此相同的键,没有间隙
- 总会有一个或两个不同的数字
我觉得无论您的真实系统是什么,都可能违反上述标准,但您需要为不同的解决方案提供更多上下文