Почему foreach возвращает результат только последней итерации?

<input type="file" name="ava" id="ava" multiple accept="image/jpeg,image/JPEG,image/jpg,image/JPG,image/png,image/PNG,image/bmp,image/BMP,image/heic,image/HEIC">


function upload_us($file)
{
    $uploaddir = $_SERVER["DOCUMENT_ROOT"] . "/user_upload/";
    if (!is_dir($uploaddir)) {
        mkdir($uploaddir, 0777);
    }

    $files = [$_FILES["ava"]];
    foreach ($_FILES["ava"] as $k => $l) {
        foreach ($l as $i => $v) {
            $files[$i][$k] = $v;
        }
    }
    
    foreach ($files as $file) {
        $fileName = date("YmdHis") . "_" . translit($file["name"]);
    }

    $count = count($fileName); // count после цикла
    echo json_encode(["error" => $count], JSON_UNESCAPED_UNICODE); //возвращает 1, хотя в input загрузил 3 файла точно, не важно сколько файлов в input всегда вернет 1 еще выводил не кол-во, а имена файлов и всегда возвращается имя только последнего файла в input
    exit(); // exit - на время теста
}

Ответы (2 шт):

Автор решения: Igor
$fileName = array();
foreach ($files as $file) {
  array_push($fileName, date('YmdHis').'_'.translit($file['name']));
}
→ Ссылка
Автор решения: Alexander

Вы всегда переписываете значение переменной $fileName, она не объявлена как массив и хранит в себе строку.

$fileName = array();     
foreach ($files as $file) {
    $fileName[] = date("YmdHis") . "_" . translit($file["name"]);
}

или

$fileName = array(); 
foreach ($files as $file) {
   array_push($fileName, date('YmdHis').'_'.translit($file['name']));
}
→ Ссылка