使用键比较2个数组并减去PHP中基于键的值

时间:2018-08-20 09:30:35

标签: php arrays subtraction

我有2个包含键和值的数组,想基于键减去2个数组值,

下面的代码是我尝试过的 第一个数组(包含键和值):

   $bulk_service_vals_id4 =  '101,102,103,104'; 
    $new_bulk_service_vals_id4 = explode(',',$bulk_service_vals_id4); 

    $bulk_service_vals4 =  '2,1,3,2'; 
    $new_bulk_service_vals4 = explode(',',$bulk_service_vals4);  

第二个数组(带有键和值):

    $booked_service_id =  '101,101,104,103,104'; 
    $new_booked_service_id = explode(',',$booked_service_id); 
    print_r(array_unique($new_booked_service_id));  
    $book_unique_service_id = array_unique($new_booked_service_id);

    $book_unique_service_val = array();
    foreach($book_unique_service_id as $new_booked_service_idss)    
    {
        //echo $new_booked_service_idss;
         $book_unique_service_val[] = substr_count($booked_service_id,$new_booked_service_idss).'<br>';
    }   
    print_r($book_unique_service_val);

合并两个数组:

    $key_val1 =array_combine($new_bulk_service_vals_id4,$new_bulk_service_vals4);
    print_r($key_val1);
    $key_val2 =array_combine($book_unique_service_id,$book_unique_service_val);
    print_r($key_val2);

第一个数组键的输出值:

   key : 101,102,103,104
   values: 2,1,3,2

第二个数组键的输出,其值:

  key: 101,104,103
  values: 2,2,1

我想获得最终的输出,例如tihis格式:

 key: 101,102,103,104
 values: 0,1,2,0

请满足我的需求。

@谢谢..

2 个答案:

答案 0 :(得分:0)

$ a1和$ a2是两个数组。

$result = array();

foreach($a1 as $k => $v)
    $result[$k] = array_key_exists($k, $a2) ? $v - $a2[$k] : $v;

答案 1 :(得分:0)

您可以使用foreach并检查第二个数组中是否存在第一个数组中的键。如果是这样,请减去值:

$key_val1 = [
    101 => 2,
    102 => 1,
    103 => 3,
    104 => 2
];

$key_val2 = [
    101 => 2,
    104 => 2,
    103 => 1
];

foreach ($key_val1 as $key => &$value) {
    if (array_key_exists($key, $key_val2)) {
        $value -= $key_val2[$key];
    }
}
unset ($value);

print_r($key_val1);

Array
(
    [101] => 0
    [102] => 1
    [103] => 2
    [104] => 0
)

Demo