Если вы не укажете индексы в своем начальном массиве, вы получите регулярные числовые. Массивы должны иметь какой-то уникальный индекс
У вас есть типографская ошибка:
$attachment_lot_layer_dir = $attachment_lot_dir . $txtLayer."/";
...
chmod($attachment_lot_layer ,0777);
Эта переменная не существует, так что да, это никогда не сработает. Mkdir из PHP уважает umask в Linux (при условии, что вы работаете в Linux, иначе этого не произойдет), поэтому ваши каталоги не создаются в маске 0777 в соответствии с запросом; однако chmod не учитывает umask, поэтому ваш первый вызов chmod на самом деле меняет маску этого каталога на 0777. Второй вызов не выполняется из-за неверного имени переменной. Отсюда и поведение, которое вы видите.
Кстати, у mkdir есть второй необязательный логический параметр, который позволит вам рекурсивно создать структуру каталогов за один вызов, передав ему полный путь к каталогу (см. здесь ). Вам также следует посмотреть на этот вопрос, чтобы понять, что делать с umask, прежде чем вызывать mkdir, если вы хотите полностью избежать последующих вызовов chmod.