从一个数组中减去另一个数组

5
我想把一个数组从另一个数组中减去。
例如,我有两个数组。
Array
(
    [0] => 251
    [1] => 251
    [2] => 130
)


 Array
    (
        [0] => 13
        [1] => 13
        [2] => 50
    )

结果数组必须是:
Array
    (
        [0] => 238
        [1] => 238
        [2] => 80
    )

任何形式的帮助都将不胜感激。

1
可能是PHP减去数组值的重复问题。 - Michael
使用array_map或array_walk来避免foreach并节省内存。 - lukaserat
7个回答

4
尝试这个:
$array1  = array(251, 251, 130);
$array2  = array( 13,  13,  50);
$res     = array();
for($i=0;$i<count($array1);$i++){
   $res[$i] = $array1[$i]-$array2[$i];
}

echo "<pre>";
print_r($res);

请注意,如果 $array2 中不存在键($i),它将会抛出一个警告。 - Rikesh
是的... 两个数组应该具有相同的长度。 - Prasanth Bendra
我收到一个错误信息,上面写着:“注意:未定义索引:translationTool”。 - Justin
@Justin - 那么 translationTool 是什么?你在问题中忘记提到的重要内容是什么? - Mark Baker
抱歉。由于其他故障,它一直在抛出错误。现在已经可以工作了。谢谢。 - Justin

4
使用array_map的解决方案:
function subtract($a, $b) {
  return $a - $b;
}

$arrayA = array(251, 251, 130);
$arrayB = array( 13,  13,  50);
$output = array_map('subtract', $arrayA, $arrayB);

如果输入的数组具有不同的维度,它仍然可以工作。

使用简单的foreach循环解决方案:

$arrayA = array(251, 251, 130);
$arrayB = array( 13,  13,  50);
$output = array();

for ( $i = 0; $i < size($arrayA); ++$i ) {
  $output[] = $arrayA[$i] - $arrayB[$i];
}

我收到一个错误,提示说注意:未定义索引:translationTool。 - Justin
没有 translationTool 工具。你该如何使用它? - hsz

1
一行代码 $array3 = $array1 - $array2 的意思是:
$array3 = array_intersect($array1, array_diff($array1, $array2));

0

试试这个

function subArray($arr1, $arr2) {
  $res = array();
  foreach ($arr1 as $key => $value) {
    $res[$key] = $arr2[$key] - $arr1[$key];
  }
}

0
$arr1 = array(251, 251, 130);
$arr2 = array( 13,  13,  50);
$result_array = array();

for ( $i = 0; $i < size($arr1); ++$i ) {
  $result_array [] = $arr1[$i] - $arr2[$i];
}

print_r($result_array);

0

我这里有一个样例代码

    function array_sub_values($arr1, $arr2)
{
    $result = array();
    foreach ($arr1 as $k => $val)
        $result[] = $val - $arr2[$k];
    return $result;
}

所以你可以这样做:

$arr1 = array(1, 2, 3);
$arr2 = array(0, 0, 1);

$arr3 = array_sub_values($arr1, $arr2);

-1
如果您不想破坏数组,则可以执行以下操作:
  1. 创建数组1的副本
  2. 循环遍历数组
  3. 如果数组2中存在相同的键,则从当前值中减去该值
代码:
$array3=array1;
while(list($key,$value)=each($array3))
{
    if(isset($array2[$key])) $array3[$key]-=$array2[$key];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接