Код не запускал, но скорее всего в строке
replacement(count($attachmentsArray[1]), $attachmentsArray, $result);
`$attachmentsArray[1]` пустой. Поэтому внутрь функции передаётся $count=0, ну и дальше обращение к массиву с индексом $count - 1, то есть -1.
Проверьте, что preg_replace_all возвращает то, что нужно. И добавьте условие с проверкой до вызова функции, что $attachmentsArray именно того формата, что вам нужен.