Почему 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']));
}