如何将一个数组中的元素合并到另一个数组中?

问题描述 投票:0回答:1

我有两个数组,结构如下

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++;
}
php arrays laravel
1个回答
0
投票

你可以直接映射主数组并推送其元素的总和。

$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) "-"
    }
}

0
投票

如果你只需要移动这两个属性, 这应该是一个简单的解决方案。

$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'];

如果有必要的话,你应该可以扩展到更多的年份,或者最终写一个循环来管理你所需要的年份。

© www.soinside.com 2019 - 2024. All rights reserved.