是否存在任何类型的函数或快速过程来比较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,因为该键在第一个数组中不存在作为值... ..
我知道这可能是一件奇怪的事情!但任何帮助都会很棒。
答案 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)));