将键分配给数组值

Assign key to array values

我有一个从堆栈溢出中获得的函数:-

function testFunction($a, $b) {
    $map = array();
    foreach($a as $name => $value){
        if(!isset($b[$name]) || $b[$name] != $value) {
            $map[$value] = 1;
        }
    }
    return array_keys($map);
}

$array1 = array("Peter"=>"35", "Ben"=>"21", "Joe"=>"43");
$array2 = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"57");

print_r(testFunction($array2, $array1));

这是我得到的结果:

Array ( [0] => 37 [1] => 57 )

因为第二个数组中的 37 与第一个数组中的 21 不同...并且 57 与 43 不同。

我的问题是:如何向值添加键?例如,我想要这个:

Array ("Ben"=>"37", "Joe"=>"57");

你可以像下面那样做:-

<?php

function testFunction($a, $b) {
    $map = array();
    foreach($a as $name => $value){
        if(!isset($b[$name]) || $b[$name] != $value) {
            $map[$name] = $value; // make key value array
        }
    }
    return $map;
}

$array1 = array("Peter"=>"35", "Ben"=>"21", "Joe"=>"43");
$array2 = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"57");

print_r(testFunction($array2, $array1));

输出:- https://eval.in/735195

使用 array_intersect_keyarray_diff 函数的简短优化解决方案:

$array1 = ["Peter"=>"35", "Ben"=>"21", "Joe"=>"43"];
$array2 = ["Peter"=>"35", "Ben"=>"37", "Joe"=>"57", 'I'=>0];

// getting all $array2 items with coincident keys
$common_key_items = array_intersect_key($array2, $array1);

// getting value difference between arrays with same keys 
$result = array_diff($common_key_items, $array1);

print_r($result);

输出:

Array
(
    [Ben] => 37
    [Joe] => 57
)