Как вариант
<?php
$array = Array
(
"---ЗАГОЛОВОК1" => "---ЗАГОЛОВОК1",
"1-подзаголовок1" => "1-подзаголовок1",
"1-подзаголовок2" => "1-подзаголовок2",
"1-подзаголовок3" => "1-подзаголовок3",
"---ЗАГОЛОВОК2" => "---ЗАГОЛОВОК2",
"2-подзаголовок1" => "2-подзаголовок1",
"2-подзаголовок2" => "2-подзаголовок2",
"---ЗАГОЛОВОК3" => "---ЗАГОЛОВОК3",
"3-подзаголовок1" => "3-подзаголовок1",
"3-подзаголовок2" => "3-подзаголовок2",
"3-подзаголовок3" => "3-подзаголовок3",
"3-подзаголовок4" => "3-подзаголовок4"
);
foreach ($array as $key => $value) {
if (substr_count($key, "---") > 0) {
$k = $key;
}
else {
$new_array[$k][$value] = $value;
}
}
var_dump($new_array);