for и foreach довольно взаимозаменяемы, но в этом случае вы не можете добавлять элементы в массив args и обрабатывать их сразу с помощью foreach, поэтому ваша функция не будет работать так же, если вы используете foreach.
Пара моментов, на которые следует обратить внимание в отношении кода: 1) помещение счетчика ($ args) во второй параметр цикла for означает, что он обрабатывается при каждой итерации цикла, что, если у вас действительно большой массив, может быть дорогим.
Я бы посчитал количество аргументов перед обработкой цикла, сохранил бы его в переменной и использовал бы его вместо количества ($ args) в аргументах for, затем добавлял 1 к счетчику каждый раз, когда вы добавляетеновый элемент в массиве args.Это было бы быстрее и потребляло бы меньше памяти.
2) Это можно было бы очистить, чтобы использовать рекурсию через функции, которые делали бы то же самое без нескольких циклов и использовали бы немного меньше кода.