问题:
嗨!我正在制作文件上传表格,我可以上传照片,我将multiple=""
添加到input
和name="upload_photo[]"
,这样我就可以上传多个文件了。当我打印$_FILES['upload_photo']
时,我得到了这个内容,并希望每个values
的{{1}}都带有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
)
)
答案 0 :(得分:1)
我认为这就是你要做的事情,请试一试:
foreach($_FILES['upload_photo'] as $photo) {
echo $photo['name'];
}
我不知道您的$_FILES
数组是如何构建的,并且看起来您在我第一次回答后更改了您的问题,因为我的解决方案适用于您最初发布问题的方式。
因此,对于$_FILES
的 new 数组结构,您必须使用嵌套循环,如下所示:
foreach($_FILES['upload_photo'] as $photo) {
foreach($photo['name'] as $name) {
echo $name;
}
}
答案 1 :(得分:1)
这就是你要追求的吗?
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
}
OR
foreach ($_FILES['upload_photo']['name'] as $value)
{
$name = $value;
//do something else
}
正如其他人所示 -
你似乎知道所涉及的数组键/它们是静态的,所以剩下要做的就是找出有多少文件 - 计算数组中的项目并多次遍历它。
答案 2 :(得分:1)
也许这是帮助你的想法 当使用$ _FILES中的给定数据执行以下代码时,它将打印类似
的内容上传1
name = ...
size = ...
上传2
name = ...
size = ...
$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/>';
}
答案 3 :(得分:1)
如果您想要的只是 JUST 上传文件的名称,那么这将有效:
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');
}
答案 4 :(得分:0)
听起来像$ _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 />";
}
}
}