2013-03-06 343 views
5

我想从另一个数组中减去一个数组。例如我有2个数组。从另一个数组中减去一个数组

Array 
(
    [0] => 251 
    [1] => 251 
    [2] => 130 
) 


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

所得阵列必须是

Array 
    (
     [0] => 238 
     [1] => 238 
     [2] => 80 
    ) 

任何形式的帮助在此被理解。

+1

可能重复http://stackoverflow.com/questions/9118150/php-subtract-array-值) – MichaelRushton 2013-03-06 10:56:07

+0

对这些使用array_map或array_walk来避免foreach和守恒的内存。 – lukaserat 2014-04-04 02:22:00

回答

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); 
+0

只需要注意,如果在$ array2中不存在键($ i),它将会发出警告。 – Rikesh 2013-03-06 10:58:05

+0

是啊......两个数组的长度应该是相同的 – 2013-03-06 10:59:32

+0

我得到一个错误说..注意:未定义的索引:translationTool – Justin 2013-03-06 11:04:29

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]; 
} 
+0

我收到一条错误说:注意:未定义索引:translationTool – Justin 2013-03-06 11:03:55

+0

没有'translationTool'。你如何使用它 ? – hsz 2013-03-06 11:04:32

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); 
-1

如果你不想破坏阵列,然后: -

  1. 创建的副本阵列1
  2. 遍历阵列
  3. IF相同的键在阵列2存在,那么从当前值中减去的值

代码:

$array3=array1; 
while(list($key,$value)=each($array3)) 
{ 
    if(isset($array2[$key])) $array3[$key]-=$array2[$key]; 
} 
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); 
0

在一个线$ ARRAY3 = $ ARRAY1 - $数组2是

$array3 = array_intersect($array1, array_diff($array1, $array2)); 
[PHP减法数组值](的