Intereting Posts
как обновить mysql с помощью php при вычитании Веб-сервер PHP в Python Как добавить повторяющуюся форму в цикле symfony2 для одного и того же объекта Невозможно выполнить аутентификацию с помощью базовой проверки подлинности с помощью WP REST API 2.0 Какая функция в php проверяет правильность строки? Повторяющиеся ключи для ассоциативных массивов PHP CodeIgniter: глобальные Vars через контроллер и косвенная модификация перегруженного имущества Как указать маршрут с параметром в paginationControl? Невозможно установить доктрину mongodb в symfony2 с композитором Jquery Date picker не может сохранять в базе данных php Как я могу автоматически настроить ширину изображения, созданного GD, в соответствии с текстом? regex вытащить все атрибуты из всех метатег Обработка на стороне клиента или на стороне сервера? MySQL: обновление всех строк, задающих поле, до 0, но установка поля одной строки в 1 Перенаправление URL-адресов в PHP вместо конфигурации сервера

Как получить ключевые значения с помощью foreach?

Проблема:


Здравствуй! Я создаю форму для загрузки файлов, где я могу загружать фотографии, я добавил 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 />"; } } }