PHP - 从 key = 相同的 2 个对象中减去值
PHP - Subtract value from 2 objects where key = is the same
我不确定我是否正确地写了这个问题,但我会详细说明我需要什么。
我有两个对象需要更改为数组,它们有键 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
最好的选择似乎是 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);
希望我没有误解你的问题。
我的方法是遍历2个数组,只要它们的key相同,就进行运算。这是一个例子:
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.
中操作数组
对于索引数组,
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
我不确定我是否正确地写了这个问题,但我会详细说明我需要什么。
我有两个对象需要更改为数组,它们有键 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
最好的选择似乎是 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);
希望我没有误解你的问题。
我的方法是遍历2个数组,只要它们的key相同,就进行运算。这是一个例子:
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.
中操作数组对于索引数组,
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