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

时间:2011-04-18 03:24:12

标签: php arrays

是否存在任何类型的函数或快速过程来比较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,因为该键在第一个数组中不存在作为值... ..

我知道这可能是一件奇怪的事情!但任何帮助都会很棒。

4 个答案:

答案 0 :(得分:3)

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

虽然您可能希望将第一个数组构建为一个集合,以便整个运行时间为O(N)而不是O(N ^ 2)。

答案 1 :(得分:2)

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

答案 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;
}

答案 3 :(得分:0)

foreach更具可读性,但您也可以使用array functions

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