$result = array_reduce( array_reverse( $keys ), function ( $c, $i ) use ( $value ) {
return [ $i => ( is_null( $c ) ? $value : $c ) ];
} );
print_r( $result );
// или по-модному, если слоник не древний
$result = array_reduce( array_reverse( $keys ), fn( $c, $i ) => [ $i => $c ?? $value ] );
print_r( $result );
https://3v4l.org/tLFqe заголовок1
заголовок2
.....
заголовокX
данные
поэтому если начался вывод данных, заголовок уже не отправить.