【问题标题】:Converting Array in PHP ($_FILES)在 PHP 中转换数组 ($_FILES)
【发布时间】:2010-11-17 10:19:04
【问题描述】:

我想在这样的数组中处理多个文件上传 $_FILES

foreach ($_FILES as $file) {
 // do stuff...
 // $file['name'] and as such
}

然而数组看起来像这样

Array ( 
    [name] => Array ( 
        [0] => 2010-10-04_205047.jpg 
        [1] => 
        [2] => 
    ) 

    [type] => Array (
        [0] => image/jpeg 
        [1] => 
        [2] => 
    ) 

    [tmp_name] => Array ( 
        [0] => E:\localhost\tmp\php118.tmp 
        [1] => 
        [2] => 
    ) 

    [error] => Array ( 
        [0] => 0 
        [1] => 4 
        [2] => 4 
    )   

    [size] => Array ( 
        [0] => 92127 
        [1] => 0 
        [2] => 0 
    ) 
) 

我应该如何把它变成我想要的格式的数组?

谢谢

【问题讨论】:

  • Here 是我写给类似问题的一个例子。

标签: php arrays file


【解决方案1】:

这很笨拙,但是

$_MYFILES = array();
foreach(array_keys($_FILES['name']) as $i) { // loop over 0,1,2,3 etc...
   foreach(array_keys($_FILES) as $j) { // loop over 'name', 'size', 'error', etc...
      $_MYFILES[$i][$j] = $_FILES[$j][$i]; // "swap" keys and copy over original array values
   }
}

【讨论】:

  • 我认为与使用 array_keys 相比,手动创建密钥会占用更少的资源,因为它总是相同的?
  • 没错,但这是 PHP ......不能保证不会重命名密钥,或者添加新的,等等......稍后。不太可能,但也不是不可能。不过,内部 array_keys 调用可以执行一次,并在第一个 foreach 循环之前缓存在 var 中。
  • 我完全同意 .. 谢谢 Marc
【解决方案2】:

您为什么不想声明新的数组 var 并以所需的格式填充它?例如

$myarr = array();
foreach ($_FILES as $file) {
  $myarr[] = array($file['name'][0], $file['type'][0], $file['tmp_name'][0], $file['size'][0]);
}

【讨论】:

  • 应该是 'tmp_name',而不是 'temp_name'(PHP 一致的命名约定不是很棒吗?:p)
  • @heximal 说真的,我认为你误解了这个问题。
【解决方案3】:

这对我有用

$files = array();
for($i =0;$_FILES['name'][$i] != NULL;$i++){
      $files[] = array($_FILES['name'][$i], $_FILES['type'][$i], $_FILES['tmp_name'][$i], $_FILES['size'][$i]);
 }

【讨论】:

    【解决方案4】:
    foreach ($_FILES['photo']['name'] as $key => $value){
        $photo[$key]['name'] = $value;
    }
    
    foreach ($_FILES['photo']['type'] as $key => $value) {
        $photo[$key]['type'] = $value;
    }
    
    foreach ($_FILES['photo']['tmp_name'] as $key => $value) {
        $photo[$key]['tmp_name'] = $value;
    }
    
    foreach ($_FILES['photo']['error'] as $key => $value) {
        $photo[$key]['error'] = $value;
    }
    
    foreach ($_FILES['photo']['size'] as $key => $value) {
        $photo[$key]['size'] = $value;
    }
    
    if ($photo[0]['error'] == 4)
        $photo = [];
    
    
    
    echo '<pre>';
    print_r($photo);
    echo '</pre>';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-25
      • 2010-12-10
      • 2017-12-23
      • 1970-01-01
      • 2014-08-17
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多