如何使用foreach获取关键值?

时间:2010-08-05 19:53:48

标签: php arrays file-upload foreach

问题:


嗨!我正在制作文件上传表格,我可以上传照片,我将multiple=""添加到inputname="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
        )

)

5 个答案:

答案 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 />";
        }
    }
}