Зачем через foreach выводить переносы строк? Чтобы получить последний элемент массива? Так обратись к нему напрямую. В следующий раз при оформлении не забывай про отступы.
<?php
$numbers = $_POST['comment'];
if(isset($_POST["start"])){
//перезапись
$html = file_get_contents( '1.php' );
preg_match_all( '#<header>(.+?)</header>#is', $html, $matches );
$old_comments = $matches[1][0];
$filename = '1.php';
$file = file_get_contents($filename);
$title_pattern='#<header>(.*)?</header>#s';
$test= preg_replace($title_pattern, "<header><div>$numbers</div>$old_comments</header>", $file);
file_put_contents($filename, $test);
//редирект
header('Refresh:0; url=http://test.ru/2.php?redirect=1');
}
file_get_contents('1.php');
?>
<form method="POST">
<input type="text" name="comment">
<input type="submit" name="start" value="send">
</form>