我需要合并这3个数组,以便输出是一个2d数组,其中包含来自其他数组的所有值。
像这样:
数组1:
$winners = array(
[1] => '20',
[5] => '2'
);
数组2:
$losers = array(
[1] => '5',
[2] => '1',
);
阵列3
$equal = array(
[1] => '1',
[2] => '2',
);
结果:
$result = array(
[1] => array(
[0] => '20', //First array
[1] => '5', //Second array
[2] => '1' //Third array
),
[2] => array(
[0] => '0', //First array (Its not in the first array, so result 0)
[1] => '1',
[2] => '2'
),
[5] => array(
[0] => '2',
[1] => '0',
[2] => '0'
),
);
答案 0 :(得分:2)
array_merge_recursive()
在这里不能用于您的目的,因为如果其他数组中不存在,它将不会为0填充。
尝试这样的事情:
$result = array();
// Get all distinct keys from all arrays.
// This is needed to make sure the 0 fill works.
$distinct_keys = array_unique(array_merge(
array_keys($array1),
array_keys($array2),
array_keys($array3)
));
// Loop through each distinct key.
// If the index exists in each array, add it, otherwise, add '0'
foreach ($distinct_keys as $key) {
$result[$key] = array();
$result[$key][] = isset($array1[$key]) ? $array1[$key] : '0';
$result[$key][] = isset($array2[$key]) ? $array2[$key] : '0';
$result[$key][] = isset($array3[$key]) ? $array3[$key] : '0';
}
答案 1 :(得分:1)
试试这个,但它没有为索引5中的未定义索引添加零,你可以做什么而不是浪费内存作为默认值。您可以在使用时书写:
if(!isset($all[5][1])) echo '0';
以下是代码:
$all = array($winners, $losers, $equals);
$output = array();
foreach($all as $subArray){
foreach($subArray as $key => $value){
$output[$key][] = $value;
}
}
答案 2 :(得分:1)
好的,我认为这是门票! 此函数将组合传入其中的所有数组,以便args中每个键的结果中都有一个键,该键的值是一个带有n个值的数组,其中n是传入数组的数量。如果给定数组的键存在于相应的传入数组中(即args中与结果子数组中的索引相同的索引处的数组),则它使用该值,否则为零。
它帮助我将传入数组中的键视为“播放器ID”,但该名称可以被认为是任意的。
function combine_scores() {
$result = array();
$player_ids = array();
$num_arrays = func_num_args();
// get list of all 'players'
foreach(func_get_args() as $input_array) {
foreach($input_array as $key=>$val) {
$player_ids[$key] = true; // memory optimization compared to $player_ids[] = $key;
}
}
// setup the final array
foreach(array_keys($player_ids) as $player_id) {
foreach(func_get_args() as $input_array) {
$result[$player_id][] = array_key_exists($key, $input_array) ? $input_array[$player_id] : 0;
}
}
return $result;
}
使用它看起来像这样:
$winners = array('5'=>1);
$losers = array('2'=>3);
$result = combine_scores($winners, $losers);