从三个平面数组创建关联数组
Create associative array from three flat arrays
考虑以下因素:
$a = array('Q1', 'Q2', 'Q3', 'Q4');
$b = array('2014' => '101', '2014' => '102', '2014' => '103', '2014' => '104');
$c = array('2015' => '101', '2015' => '102', '2015' => '103', '2015' => '104');
如何将这 3 个数组转换成一个这样的数组:
array(
'Q1' => array(
'2014' => '101',
'2015' => '101'
),
'Q2' => array(
'2014' => '102',
'2015' => '102'
),
'Q3' => array(
'2014' => '103',
'2015' => '103'
),
'Q4' => array(
'2014' => '104',
'2015' => '104'
)
);
我无法以一种可以使用 array_combine
和 $a
的方式正确合并 $b
和 $c
,以保持上述所需的结构。
抱歉 array()
整个代码,我正在处理旧版应用程序。
这应该有效
<?php
$d = array();
for($i=0; $i<count($a), $++){
$d[$a[$i]][] = $b[$i];
$d[$a[$i]][] = $c[$i];
}
print_r($d)
?>
首先,您有重复的数组键,在这种情况下,最后一个键将覆盖前面的键。在这里,任意假设键具有唯一的后缀,以便于您想要的合并。
<?php
$a = array('Q1', 'Q2', 'Q3', 'Q4');
$b = array('2014' => '101', '2014_2' => '102', '2014_3' => '103', '2014_4' => '104');
$c = array('2015' => '101', '2015_2' => '102', '2015_3' => '103', '2015_4' => '104');
function mergeArraysAssociative($arrKeys, $array1, $array2) {
$merged = array();
foreach ($arrKeys as $key => $val) {
$arrKeys1 = array_keys($array1);
$arrKeys2 = array_keys($array2);
$arrValues1 = array_values($array1);
$arrValues2 = array_values($array2);
$merged[$val][$arrKeys1[$key]] = $arrValues1[$key];
$merged[$val][$arrKeys2[$key]] = $arrValues2[$key];
}
return $merged;
}
var_dump(mergeArraysAssociative($a, $b, $c));
?>
The var_dump() above produces something similar to what is shown below. And, you can quick test it here.
array (size=4)
'Q1' =>
array (size=2)
2014 => string '101' (length=3)
2015 => string '101' (length=3)
'Q2' =>
array (size=2)
'2014_2' => string '102' (length=3)
'2015_2' => string '102' (length=3)
'Q3' =>
array (size=2)
'2014_3' => string '103' (length=3)
'2015_3' => string '103' (length=3)
'Q4' =>
array (size=2)
'2014_4' => string '104' (length=3)
'2015_4' => string '104' (length=3)
考虑以下因素:
$a = array('Q1', 'Q2', 'Q3', 'Q4');
$b = array('2014' => '101', '2014' => '102', '2014' => '103', '2014' => '104');
$c = array('2015' => '101', '2015' => '102', '2015' => '103', '2015' => '104');
如何将这 3 个数组转换成一个这样的数组:
array(
'Q1' => array(
'2014' => '101',
'2015' => '101'
),
'Q2' => array(
'2014' => '102',
'2015' => '102'
),
'Q3' => array(
'2014' => '103',
'2015' => '103'
),
'Q4' => array(
'2014' => '104',
'2015' => '104'
)
);
我无法以一种可以使用 array_combine
和 $a
的方式正确合并 $b
和 $c
,以保持上述所需的结构。
抱歉 array()
整个代码,我正在处理旧版应用程序。
这应该有效
<?php
$d = array();
for($i=0; $i<count($a), $++){
$d[$a[$i]][] = $b[$i];
$d[$a[$i]][] = $c[$i];
}
print_r($d)
?>
首先,您有重复的数组键,在这种情况下,最后一个键将覆盖前面的键。在这里,任意假设键具有唯一的后缀,以便于您想要的合并。
<?php
$a = array('Q1', 'Q2', 'Q3', 'Q4');
$b = array('2014' => '101', '2014_2' => '102', '2014_3' => '103', '2014_4' => '104');
$c = array('2015' => '101', '2015_2' => '102', '2015_3' => '103', '2015_4' => '104');
function mergeArraysAssociative($arrKeys, $array1, $array2) {
$merged = array();
foreach ($arrKeys as $key => $val) {
$arrKeys1 = array_keys($array1);
$arrKeys2 = array_keys($array2);
$arrValues1 = array_values($array1);
$arrValues2 = array_values($array2);
$merged[$val][$arrKeys1[$key]] = $arrValues1[$key];
$merged[$val][$arrKeys2[$key]] = $arrValues2[$key];
}
return $merged;
}
var_dump(mergeArraysAssociative($a, $b, $c));
?>
The var_dump() above produces something similar to what is shown below. And, you can quick test it here.
array (size=4)
'Q1' =>
array (size=2)
2014 => string '101' (length=3)
2015 => string '101' (length=3)
'Q2' =>
array (size=2)
'2014_2' => string '102' (length=3)
'2015_2' => string '102' (length=3)
'Q3' =>
array (size=2)
'2014_3' => string '103' (length=3)
'2015_3' => string '103' (length=3)
'Q4' =>
array (size=2)
'2014_4' => string '104' (length=3)
'2015_4' => string '104' (length=3)