Проблема:
Здравствуй! Я создаю форму для загрузки файлов, где я могу загружать фотографии, я добавил multiple=""
на input
и для name="upload_photo[]"
поэтому я могу загрузить несколько файлов. Когда я печатаю $_FILES['upload_photo']
я получаю это, и я хочу получить values
каждого key
с помощью foreach
.
Так, например, я хочу получить только [name]
что будет egg.jpg
и green.jpg
.
Array ( [name] => Array ( [0] => egg.jpg [1] => green.jpg ) [type] => Array ( [0] => image/jpeg [1] => image/jpeg ) [tmp_name] => Array ( [0] => C:\wamp\tmp\php50E9.tmp [1] => C:\wamp\tmp\php50EA.tmp ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 24450 [1] => 65030 ) )
Это то, что я пробовал до сих пор
Но это дает мне все, что у меня нет.
foreach($_FILES['upload_photo'] as $keys => $file){ foreach($_FILES['upload_photo'][$keys] as $key => $files){ echo $files . "<br />"; } }
Я думаю, это то, что вы пытаетесь сделать, сделайте это:
foreach($_FILES['upload_photo'] as $photo) { echo $photo['name']; }
Я не знаю, как ваш массив $_FILES
получил такую структуру, и, похоже, вы изменили свой вопрос, так как я впервые ответил, так как мое решение работало так, как ваш вопрос был первоначально опубликован.
Итак, для новой структуры массива $_FILES
вам придется использовать вложенные циклы, например:
foreach($_FILES['upload_photo'] as $photo) { foreach($photo['name'] as $name) { echo $name; } }
может быть, это идея помочь вам при выполнении следующего кода с вашими данными в $ _FILES, он напечатает что-то вроде
загрузить 1
name = …
размер = …
загрузить 2
name = …
размер = …
$numUploads = count($_FILES['upload_photo']['name']); for ($n = 0; $n < $numUploads; $n++) { echo 'upload ' . $n . '<br/>'; foreach ($_FILES['upload_photo'] as $prop => $values) { echo $prop . ' = ' . $_FILES['upload_photo'][$prop][$n] . '<br/>'; } echo '<hr/>'; }
Если все, что вам нужно, это ТОЛЬКО имена загруженных файлов, тогда это будет работать:
foreach($_FILES['upload_photo']['name'] as $idx => $name) { echo "File #$idx: $name<br />" }
Если вы хотите обработать каждый загруженный файл, вам понадобится что-то вроде этого:
foreach(array_keys($_FILES['upload_photo']['name']) as $idx) { move_uploaded_file($_FILES['upload_photo']['tmp_name'][$idx], '/some/where/on/your/server'); }
Это то, что вам нужно?
foreach($_FILES['upload_photo'] as $key => $value) { for ($i = 0; $i < count($_FILES['upload_photo'][$key]); $i++) { echo $_FILES['upload_photo'][$key][$i]; } }
Не уверен, что я хотел бы справиться с этой ситуацией, но я думаю, что это сработает в вашем случае.
изменить: забыли счет
edit2: Если вы знаете, что ваш массив содержит ключи, показанные в примере выше, чтобы получать все значения только из массива ['name']
, вы должны сделать следующее:
for ($i = 0; $i < count($_FILES['upload_photo']['name']); $i++) { $name = $_FILES['upload_photo']['name'][$i]; //do something else }
ИЛИ
foreach ($_FILES['upload_photo']['name'] as $value) { $name = $value; //do something else }
Как показали другие,
Кажется, вы знакомы с задействованными ключами массива / они статичны, поэтому осталось только выяснить, сколько файлов есть – подсчитать элементы внутри массива и прокрутить его много раз.
Похоже, $ _FILES странно. Итак, чтобы получить имена, вы просто хотите …
foreach($_FILES['upload_photo']['name'] AS $name) { echo $name . "<br />"; }
Или, основываясь на моем комментарии ниже, вы могли бы сделать …
foreach($_FILES['upload_photo'] AS $key => $file) { if ($key == 'name') { foreach($file AS $name) { echo $name . "<br />"; } } }