Php 如何循环遍历$\u文件数组的多维数组

Php 如何循环遍历$\u文件数组的多维数组,php,arrays,Php,Arrays,我正在使用dropzone将文件上载到我的文件夹。已成功获取文件数组 foreach($_FILES as $file) { print_r($file); } 电流输出: Array ( [name] => Array ( [0] => Image.PNG [1] => sadssadsa.PNG ) [type] => Array

我正在使用dropzone将文件上载到我的文件夹。已成功获取文件数组

   foreach($_FILES as $file) {
       print_r($file);
    }
电流输出:

Array
(
    [name] => Array
        (
            [0] => Image.PNG
            [1] => sadssadsa.PNG
        )

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

    [tmp_name] => Array
        (
            [0] => C:\Users\CH MANAN\AppData\Local\Temp\php48B6.tmp
            [1] => C:\Users\CH MANAN\AppData\Local\Temp\php48B7.tmp
        )

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

    [size] => Array
        (
            [0] => 291647
            [1] => 112790
        )
)
预期产出

array
(
    [0] => array
    (
        [name] => Image.PNG
        [type] => image/png
        [tmp_name] => C:\Users\CH MANAN\AppData\Local\Temp\php48B6.tmp
        [error] => 0
        [size] => 291647
    )

    [1] => array
    (
        [name] => sadssadsa.PNG
        [type] => image/png
        [tmp_name] => C:\Users\CH MANAN\AppData\Local\Temp\php48B7.tmp
        [error] => 0
        [size] => 112790
    )
)

在父循环中尝试了各种循环,但未获得预期结果。有人可以在这里提供帮助。

您看到的
$\u文件的输出是一个标准输出,用于上载多个文件。您可以迭代
$\u文件的一个子数组(例如
名称
),并从同一关键字下的其他子数组中获取值:

foreach ($_FILES['name'] as $key => $value) {
    echo $value, $_FILES['error'][$key], $_FILES['tmp_name'][$key];   // etc
}
看看这个例子:

$source = [
    'name' => [
        'test1',
        'test2'
    ],
    'type' => [
        'jpg',
        'png'
    ]
];
$result = [];

foreach ($source as $key => $subArray) {
    foreach ($subArray as $index => $value) {
        if (!array_key_exists($index, $result)) {
            $result[$index] = [];
        }
        $result[$index][$key] = $value;
    }
}

var_dump($result);
它首先查看(文件)索引。如果
$result
中不存在索引,则将添加该索引。然后将带有值的键添加到相应的索引中


在前进之前,您应该先学习基础知识(操作多维数组等)。您是否有教程或其他学习内容?

您可以循环数组,并使用array\u combine和array\u column变换数组

foreach($_FILES as $file) {
    $keys = array_keys($file);
    foreach($file['name'] as $key => $f){
        $new[] = array_combine($keys, array_column($file, $key));
    }
}
var_dump($new);
参见工作示例:

您可以使用以下功能:

$keys = array_keys($_FILES); // get all the fields name
$res = array_map(null, ...array_values($_FILES)); // group the array by each file
$res = array_map(function ($e) use ($keys) {return array_combine($keys, $e);}, $res); // insert the field name to result array
文件:

,及


实例:

那么重建阵列有什么问题?顺便说一句,这是多个上传文件的标准
$\u文件
。@u\u mulder我不知道如何构建该数组。这就是问题所在。我在内部尝试了各种循环,但没有得到预期的输出。举个例子可能会有所帮助。看看这个:带有print_r输出的循环是否输出了您当前的输出?@Andreas yes这是带有print_raray_combine()的循环:两个参数的元素数应该相等设置
数组(5){[“name”]=>bool(false)[“type”]=>bool(false)[“tmp_name”]=>bool(false)[“error”]=>bool(false)[“size”]=>bool(false)}
您从
$res=array_map(null,$_文件);
?(可能我错过了$_文件结构)
array(5){[“name”]=>array(2){[0]=>string(13)“sadsadsa.PNG”[1]=>string(8)“SLIP.PNG”[“type”=>array(2){[0]=>string(9)“image/png”[1]=>string(9)“image/png”}[“tmp_name”]=>array(2){[0]=>string(47)“C:\Users\CH MANAN\AppData\Local\Temp\php5BC.tmp”[1]=>string(47)“C:\Users\CH MANAN\AppData\Local\Temp\php5CC.tmp”}[“error”]=>array(2){[0]=>int(0)[1]=>int(0)}“size”]=>数组(2){[0]=>int(112790)[1]=>int(112968)}
@MR_AMDEV的问题是缺少
数组值
-当您看到我的预期输出需要一个数组,并且键应该有值而不是数组时进行了更新。@MR_AMDEV他们完全一样!看看这个,现在我使用print\r。它看起来更好吗?@MR_AMDEV和接受的答案相反,我没有创建通知和警告谢谢。只是忽略了代码,意识到它是输出。