PHP:二维数组的计算

  • 本文关键字:计算 二维数组 PHP php
  • 更新时间 :
  • 英文 :


我有 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将始终包含主键
  • 两个数组都包含彼此相同的键,没有间隙
  • 总会有一个或两个不同的数字

我觉得无论您的真实系统是什么,都可能违反上述标准,但您需要为不同的解决方案提供更多上下文

最新更新