Почему словосочетания выводятся отдельными словами?
Вот причина вашей проблемы:$key = str_replace(array(",","|","/"),array(" "," "," "),$key);
$arr = explode(" ",$key);
Код писать я не буду, уверен, в двух функциях вы разберётесь самостоятельно.
$key = str_replace(array("|","/"),array(",",","),$key);
        $arr = explode(",",$key);
типо так чтоль? еще было бы полезным проверить отсекаются ли пробелы в начале строки ключа