не совсем понятно: имеет ли какое-то значение начальный паттерн ATG, кроме длины (3) ?
В 1 и 2 примере, вроде бы, остальные две буквы остаются из начального паттерна, и меняется только одна.
Но в 3-м примере уже идёт ответвление от 1-й мутации второй буквы.
В итоге нужны все варианты из набора ATGC длиной 3 символа?
Ещё вопрос: стоит ли заставлять модераторов проверять-аппрувить каждый раз целиком все поля профиля, или только diff изменений? Если нет, то варианты 2, 4 отваливаются, либо писать механизм сравнения, чтобы показать на проверку только изменившиеся поля.
Вадим, reduce() прошёл свой пик славы и вышел в тираж, рекламирует ширпотреб )
Есть подозрение, что таки не строка, а массив буковок нужен, поэтому пускай так.
Taros, пример вашего кода с if-else покажите. В нём можно будет заменить if-else на, например, массив с двумя элементами и обращением к одному из них через преобразование типа Boolean -> Number.
print_r($item[3])?