А не будет ли наименее затратным по памяти вообще перебор исходного массива foreach'ем и формирование чанка в верхнем цикле и его обработка, когда размер чанка будет достигнут?
На сколько я понимаю, если есть массив на миллион строк и его разбить на чанки по 1000, то в памяти будет один массив на миллион строк и 1000 массивов по тысяче строк.
А в варианте из первого абзаца - массив на миллион строк, массив на 0...1000 строк, и ин-т на позицию в глобальном массиве...