Можно в цикле пройтись по элементам текущего массива (foreach например),
//$arr - имеющийся одномерный массив
$newarr = array();
foreach($arr as $key=>$val)
{
if(preg_match('#---#',$val))
{
$a = $key;
continue;
}
$b[$key] = $val;
$newarr[$a] = $b;
}
Array
(
[---ЗАГОЛОВОК1] => Array
(
[1-подзаголовок1] => 1-подзаголовок1
[1-подзаголовок2] => 1-подзаголовок2
[1-подзаголовок3] => 1-подзаголовок3
)
[---ЗАГОЛОВОК2] => Array
(
[1-подзаголовок1] => 1-подзаголовок1
[1-подзаголовок2] => 1-подзаголовок2
[1-подзаголовок3] => 1-подзаголовок3
[2-подзаголовок1] => 2-подзаголовок1
[2-подзаголовок2] => 2-подзаголовок2
)
[---ЗАГОЛОВОК3] => Array
(
[1-подзаголовок1] => 1-подзаголовок1
[1-подзаголовок2] => 1-подзаголовок2
[1-подзаголовок3] => 1-подзаголовок3
[2-подзаголовок1] => 2-подзаголовок1
[2-подзаголовок2] => 2-подзаголовок2
[3-подзаголовок1] => 3-подзаголовок1
[3-подзаголовок2] => 3-подзаголовок2
[3-подзаголовок3] => 3-подзаголовок3
[3-подзаголовок4] => 3-подзаголовок4
)
)