如果一个PHP数组的键在另一个数组中不存在,则将其值设置为0。

3

是否有一种函数或快速处理方式可以比较PHP中的两个数组,以一种方式,如果一个数组的值存在于第二个数组中,则第二个数组保持其键的值,否则该键的值设置为0。

例如:

$first_array = array('fred', 'george', 'susie');

$second_array = array(
                'fred' => '21', 
                'george' => '13',     
                'mandy' => '31',     
                'susie' => '11'
    );

在比较过后,理想情况下我的最终数组将是:

Fred > 21
George > 13
Mandy > 0 
Susie > 11

由于第一个数组中不存在该键,因此将Mandy设置为0……

我知道这可能有点奇怪!但任何帮助都将是极好的。


可以使用array_walk()、array_map()或foreach()来完成。 - user557846
有趣,谢谢Dagon。我会查找这些函数的。 - coopertrooper
4个回答

2
foreach($second_array as $name => $age) {
    if(in_array($name, $first_array) {
        //whatever
    }
    else {
        //set the value to zero
    }
}

2
foreach ($second_array as $key=>$val) {
    if (!in_array($key, $first_array))) {
        $second_array[$key] = 0;
    }
}

尽管你可能想将第一个数组构建为集合,以便总运行时间为O(N)而不是O(N ^ 2)。

1
// get all keys of the second array that is not the value of the first array
$non_matches = array_diff(array_keys($second_array), $first_array);

// foreach of those keys, set their associated values to zero in the second array
foreach ($non_$matches as $match) {
    $second_array[$match] = 0;
}

0

foreach 更易读,但你也可以使用数组函数

array_merge($second_array, 
            array_fill_keys(array_diff(array_keys($second_array), 
                                       $first_array), 
                            0));                        
# or
array_merge(
    array_fill_keys(array_keys($second_array), 0),
    array_intersect_key($second_array, array_flip($first_array)));
# or
function zero() {return 0;}

array_merge(
    array_map('zero', $second_array),
    array_intersect_key($second_array, array_flip($first_array)));

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