示例:
$arr1 = array('a' => "1", 'b' => "2", 'c' => "3", 'z' => "4");
$arr2 = array('a' => "9", 'b' => "8", 'c' => "7", 'd' => "6", 'e' => "5");
输出:
$result = array('a' => array( 'f1' => "1", 'f2' => "9"),
'b' => array( 'f1' => "2", 'f2' => "8"),
'c' => array( 'f1' => "3", 'f2' => "7"),
'd' => array( 'f1' => "0", 'f2' => "6"),
'e' => array( 'f1' => "0", 'f2' => "5"),
'z' => array( 'f1' => "4", 'f2' => "0"),);
$ arr1的大小可以是'>','<'或'='大小$ arr2
答案 0 :(得分:3)
我想是这样,
$arr1 = array('a' => "1", 'b' => "2", 'c' => "3", 'z' => "4");
$arr2 = array('a' => "9", 'b' => "8", 'c' => "7", 'd' => "6", 'e' => "5");
foreach($arr1 as $key => $value){
$a[$key]['f1'] = $value;
}
foreach($arr2 as $key => $value){
$b[$key]['f2'] = $value;
}
$c = array_merge_recursive($a, $b);
foreach($c as $key => $value){
$result[$key]['f1'] = (array_key_exists('f1', $value)) ? $value['f1']: 0;
$result[$key]['f2'] = (array_key_exists('f2', $value)) ? $value['f2']: 0;
}
echo "<pre>".print_r ($result, true);
输出:
Array
(
[a] => Array
(
[f1] => 1
[f2] => 9
)
[b] => Array
(
[f1] => 2
[f2] => 8
)
[c] => Array
(
[f1] => 3
[f2] => 7
)
[z] => Array
(
[f1] => 4
[f2] => 0
)
[d] => Array
(
[f1] => 0
[f2] => 6
)
[e] => Array
(
[f1] => 0
[f2] => 5
)
)
答案 1 :(得分:1)
array_merge_recursive()应该有效:http://php.net/manual/en/function.array-merge-recursive.php
否则它很简单就行了几行:(除非你真的需要“fn”索引。)
function my_merge(){
$result = array();
foreach(func_get_args() as $a)
foreach($a as $index => $value)
$result[$index][] = $value;
}
答案 2 :(得分:0)
试试这个:
$keys = array_unique(array_merge(array_keys($arr1), array_keys($arr2)));
$values = array_map(function($key) use ($arr1, $arr2) {
return array('f1' => isset($arr1[$key]) ? $arr1[$key] : "0",
'f2' => isset($arr2[$key]) ? $arr2[$key] : "0"); }
, $keys);
$result = array_combine($keys, $values);
var_dump($result);
一些解释:
$keys
。但目前这只适用于两个阵列。
编辑这是一个适用于任意数量的数组的文件:
$arrays = array($arr1, $arr2);
$keys = array_unique(call_user_func_array('array_merge', array_map('array_keys', $arrays)));
$values = array_map(function($key) use ($arrays) {
return array_combine(array_map(function($key) {
return 'f'.($key+1);
}, array_keys($arrays)),
array_map(function($array) use ($key) {
return isset($array[$key]) ? $array[$key] : "0";
}, $arrays));
}, $keys);
$result = array_combine($keys, $values);
var_dump($result);
一些解释:
$arrays
。$arrays
中的每个数组,在其上调用array_keys
以获取密钥,合并这些数组并获取所有唯一密钥的数组$keys
。$keys
中的每个键,检查数组$arrays
数组中是否存在该键。答案 3 :(得分:0)
$arr1 = array('a' => "1", 'b' => "2", 'c' => "3", 'z' => "4");
$arr2 = array('a' => "9", 'b' => "8", 'c' => "7", 'd' => "6", 'e' => "5");
function combineArray($arr1, $arr2) {
if (is_array($arr1) && is_array($arr2)) {
$rArr = array();
$steps = max ( count($arr1),count($arr2));
$ak1 = array_keys($arr1);
$ak2 = array_keys($arr2);
for ($i=0;$i<$steps;$i++) {
if (!isset($rArr[$i])) $rArr[$i]=array();
$rArr[$i]['f1'] = (isset($arr1[$ak1[$i]])) ? $arr1[$ak1[$i]]: '0';
$rArr[$i]['f2'] = (isset($arr2[$ak2[$i]])) ? $arr2[$ak2[$i]]: '0';
}
return $rArr;
}else {
return false;
}
}
echo "<pre>".print_r (combineArray($arr1, $arr2),true);
可能有效:)