我有两个数组,结构如下
array
'main' => array
'firstYearStudents' => array
0 => '10'
1 => '12'
'secondYearStudents' => array
0 => '8'
1 => '9'
'total' => array
'totalFirstYear' => '22'
'totalSecondYear' => '17'
但是,我想得到以下的一个。
array
'main' => array
'firstYearStudents' => array
0 => '10'
1 => '12'
2 => '22'
'secondYearStudents' => array
0 => '8'
1 => '9'
2 => '17'
但我不明白如何将 "total "数组中的值附加到 "main "数组中的值。你能告诉我应该朝哪个方向移动吗?
EDIT:如果我有以下键以及上述的键呢?
array
'main' => array
'firstYearStudents' => array
0 => '10'
1 => '12'
'secondYearStudents' => array
0 => '8'
1 => '9'
'programCode' => array
0 => '03.02.01'
1 => '03.01.01'
'total' => array
'totalFirstYear' => '22'
'totalSecondYear' => '17'
'programCode' => '-'
那么所需的结构应该是这样的
array
'main' => array
'firstYearStudents' => array
0 => '10'
1 => '12'
2 => '22'
'secondYearStudents' => array
0 => '8'
1 => '9'
2 => '17'
'programCode' => array
0 => '03.02.01'
1 => '03.01.01'
2 => '-'
我试过下面的方法,但我得到了命名键,所以我无法访问这些键。
$i = 0;
foreach ($studentsEditInfo['main'] as $values) {
$studentsEditInfo['main'] = array_merge($values, $studentsEditInfo['total'][$i]);
$i++;
}
你可以直接映射主数组并推送其元素的总和。
$array['main'] = array_map(static function($counts) {
$sum = ctype_digit(implode('', $counts)) ? array_sum($counts) : '-';
return array_merge($counts, [$sum]);
}, $array['main']);
数组的值 main
键才是你真正需要的。
array(2) {
["firstYearStudents"]=>
array(3) {
[0] => int(10)
[1] => int(12)
[2] => int(22)
}
["secondYearStudents"]=>
array(3) {
[0] => int(8)
[1] => int(9)
[2] => int(17)
}
["programCode"]=>
array(3) {
[0] => string(8) "03.02.01"
[1] => string(8) "03.01.01"
[2] => string(1) "-"
}
}
如果你只需要移动这两个属性, 这应该是一个简单的解决方案。
$data = [
'main' => [
'firstYearStudents' => [
'10',
'12'
],
'secondYearStudents' => [
'8',
'9'
]
],
'total' => [
'totalFirstYear' => '22',
'totalSecondYear' => '17'
]
];
$data['main']['firstYearStudents'][] = $data['total']['totalFirstYear'];
$data['main']['secondYearStudents'][] = $data['total']['totalSecondYear'];
如果有必要的话,你应该可以扩展到更多的年份,或者最终写一个循环来管理你所需要的年份。