如何有条件地执行两个数组中对应元素之间的相减?

时间:2018-08-10 18:17:08

标签: php arrays null conditional subtraction

我试图从两个数组中减去值。我也尝试过使用if条件,null值,foreach和许多其他方法,例如array_filter,但是失败了。

$exit_price包含:

array (
    0 => 2205,
    1 => 6680,
    2 => 50351,
    3 => 100,
    4 => 100,
    5 => 1200,
    6 => 900,
    7 => 234,
    8 => 2342,
    9 => 45654
)

$stoploss包含:

array (
    0 => null,
    1 => null,
    2 => null,
    3 => null,
    4 => null,
    5 => null,
    6 => 145300,
    7 => null,
    8 => null,
    9 => 12222
)

如何通过从$stoploss中减去$exit_price来获得以下结果,而忽略$stoploss值为null的结果呢?

预期结果:

array (
    6 => -144400,
    9 => 33432
)

2 个答案:

答案 0 :(得分:2)

一种方法可能是将两个数组都传递给array_map

在array_map内部,检查stoploss的当前项是否不为null。如果不是,则进行减法。

在array_map之后,使用array_filter删除空值:

$exit_price = [
    0 => 2205,
    1 => 6680,
    2 => 50351,
    3 => 100,
    4 => 100,
    5 => 1200,
    6 => 900,
    7 => 234,
    8 => 2342,
    9 => 45654
];
$stoploss = [
    0 => null,
     1 => null,
     2 => null,
     3 => null,
     4 => null,
     5 => null,
     6 => 145300,
     7 => null,
     8 => null,
     9 => 12222
];

$result = array_map(function ($x, $y) {
    if (null !== $y) {
        return $x - $y;
    }
    return null;

}, $exit_price, $stoploss);

print_r(array_filter($result, function ($z) {
    return null !== $z;
}));

Demo

答案 1 :(得分:2)

您可以简单地迭代第一个数组,然后检查第二个数组中的相应元素的null值。如果该值不为null,则执行减法运算,并使用当前键将差异存储在新的“结果”数组中。

$results = [];

foreach ($stoploss as $key => $value) {
    if (!is_null($value)) {
        $results[$key] = $exit_price[$key] - $value;
    }
}