【问题标题】:PHP - Subtract value from 2 objects where key = is the samePHP - 从 key = 相同的 2 个对象中减去值
【发布时间】:2016-07-21 13:04:26
【问题描述】:

我不确定我是否正确地写了这个问题,但我会详细说明我需要什么。

我有两个对象需要更改为数组,它们有键 1、2、3,但它们有不同的值,我需要从键相同的数组中减去值,我希望这是有道理的。

我尝试过的事情

  • 将它们都推送到 1 个数组并从那里进行数学运算(不知道如何执行此操作)
  • 使用 array_diff 查找数组中的差异但没有用。

感谢所有帮助,我们将提供所需的更多信息

示例数组:

数组 1

1 => 300.00,
2 => 300.00,
3 => 300.00

数组 2

1 => 200.00,
2 => 200.00,
3 => 200.00

期望的输出

1 => 100.00,
2 => 100.00,
3 => 100.00

【问题讨论】:

  • 您想从两个数组中删除该项目还是只删除一个?
  • 不删除我需要从另一个中减去 1 以及一些如何存储它
  • @Kenziee 检查我的更新答案
  • @twigg 我已经发表了评论

标签: php arrays laravel laravel-5.1


【解决方案1】:

最好的选择似乎是 for 循环

$arr1 = [300, 300, 300];
$arr2 = [200, 200, 200];

$arr_length = sizeof($arr1) -1;

$minus_arr = [];

for($i = 0; $i <= $arr_length; $i++){
    $minus = $arr1[$i] - $arr2[$i];
    array_push($minus_arr, $minus);
}

print_r($minus_arr);

我认为您在上面给定的数组是理所当然的,听起来您使用的数组要么大小不同,要么包含字符串或空值,因此请先检查 int。

    <?php

$arr1 = [300, 300, 300];
$arr2 = [200, 200, 200];

$arr_length = sizeof($arr1) -1;

$minus_arr = [];

for($i = 0; $i <= $arr_length; $i++){
    if(is_int($arr1[$i]) && is_int($arr2[$i])){
        $minus = $arr1[$i] - $arr2[$i];
        array_push($minus_arr, $minus);
    }
}

print_r($minus_arr);

【讨论】:

  • 我在数组值前面添加了(双)标志,它的工作但它为所有内容返回 0
  • 数组是一个关联,所以不是 '$array = [200,200,200]' 而是 '$array = [ 'id' => 1, 'value' => 200 ]' 等等。 .;
【解决方案2】:

希望我没有误解你的问题。

我的方法是遍历 2 个数组,只要它们的键相同,就执行操作。这是一个例子:

function diff($arr1, $arr2) {
    $result = [];
    foreach($arr1 as $key1 => $value1) {
        foreach($arr2 as $key2 => $value2) {
            if ($key1 == $key2) {
                $result[$key1] = $value1 - $value2;
            }
        }
    }
    return $result;
}

我看到你的标签中有 Laravel,如果你正在使用 laravel,我相信你可以通过 Collection 更好地实现这一点。该文档是here。它为您提供了一种更“OO”的方式(类似于 javascript),您可以在 php 中操作数组。

【讨论】:

  • 我试过了,但我不确定要使用哪些操作
【解决方案3】:

对于索引数组,

function diff($arr1, $arr2){      
    $arr3=array();
    for($i=0;$i<count($arr1);$i++){
        $arr3[$i]=$arr1[$i]-$arr2[$i];
    }
    print_r($arr3);
}
$arr1=array(300,300,300);
$arr2=array(100,100,100);
diff($arr1, $arr2);
//Displays 200, 200, 200, as expected

【讨论】:

    猜你喜欢
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2017-03-04
    • 1970-01-01
    • 2014-05-04
    相关资源
    最近更新 更多