Объединение одинаковых значений в многомерном массиве

Есть массив вида

    array:211 [▼
  0 => array:18 [▼
    0 => "2Ц2-0"
    1 => null
    2 => null
    3 => null
    4 => null
    5 => null
    6 => null
    7 => "1"
    8 => null
    9 => null
    10 => null
    11 => null
    12 => null
    13 => null
    14 => null
    15 => null
    16 => null
    17 => null
  ]
  1 => array:18 [▼
    0 => "2Ц2-160Н"
    1 => "1"
    2 => null
    3 => null
    4 => null
    5 => null
    6 => null
    7 => null
    8 => null
    9 => null
    10 => null
    11 => null
    12 => null
    13 => null
    14 => null
    15 => null
    16 => null
    17 => null
  ]
  2 => array:18 [▼
    0 => "2Ц2-160Н"
    1 => null
    2 => null
    3 => null
    4 => null
    5 => null
    6 => null
    7 => "1"
    8 => null
    9 => null
    10 => null
    11 => null
    12 => null
    13 => null
    14 => null
    15 => null
    16 => null
    17 => null
  ]
]

Нужно пройтись по массиву и привести его к виду

    array:211 [▼
  0 => array:18 [▼
    0 => "2Ц2-0"
    1 => null
    2 => null
    3 => null
    4 => null
    5 => null
    6 => null
    7 => "1"
    8 => null
    9 => null
    10 => null
    11 => null
    12 => null
    13 => null
    14 => null
    15 => null
    16 => null
    17 => null
  ]
  1 => array:18 [▼
    0 => "2Ц2-160Н"
    1 => "1"
    2 => null
    3 => null
    4 => null
    5 => null
    6 => null
    7 => "1"
    8 => null
    9 => null
    10 => null
    11 => null
    12 => null
    13 => null
    14 => null
    15 => null
    16 => null
    17 => null
  ]
]

Ответы (1 шт):

Автор решения: E_K

Пройтись в циклах по массивам и объединить значения в новом.

$arr = [
    [
        0 => 'First',
        1 => null,
        2 => 'Value 1.2',
    ],
    [
        0 => 'Second',
        1 => 'Value 2.1',
        2 => null,
        3 => null,
    ],
    [
        0 => 'Second',
        1 => null,
        2 => 'Value 3.2',
        3 => 'Value 3.3',
    ],
];

$result = [];

foreach ( $arr as $subArr ) {
    $key = $subArr[0];

    if ( ! isset( $result[ $key ] ) ) {
        $result[ $key ] = $subArr;
        continue;
    }

    foreach ( $subArr as $k => $v ) {
        $result[ $key ][ $k ] = $v ?: $result[ $key ][ $k ];
    }
}

Результат

Array
(
    [First] => Array
        (
            [0] => First
            [1] => 
            [2] => Value 1.2
        )

    [Second] => Array
        (
            [0] => Second
            [1] => Value 2.1
            [2] => Value 3.2
            [3] => Value 3.3
        )

)
→ Ссылка