Php 更改$\u文件的结构

Php 更改$\u文件的结构,php,arrays,file,Php,Arrays,File,我尝试编写通用方法来改变多维$\文件的结构 例如,我们有: $_FILES['picture']['name'][8][4][2] = img.jpg $_FILES['picture']['tmp_name'][8][4][2] = abcd $_FILES['picture']['size'][8][4][2] = 50 我们需要: $_FILES['picture'][8][4][2]['name'] = img.jpg $_FILES['picture'][8][4][2]['tmp_

我尝试编写通用方法来改变多维$\文件的结构

例如,我们有:

$_FILES['picture']['name'][8][4][2] = img.jpg
$_FILES['picture']['tmp_name'][8][4][2] = abcd
$_FILES['picture']['size'][8][4][2] = 50
我们需要:

$_FILES['picture'][8][4][2]['name'] = img.jpg
$_FILES['picture'][8][4][2]['tmp_name'] = abcd 
$_FILES['picture'][8][4][2]['size'] = 50
解决方案应适用于所有可能的$\u文件。 有什么想法吗

编辑:这是我的一个尝试

它适用于$_文件['picture'],不适用于$_文件['contract']

<?php

ini_set('display_errors','on');
error_reporting(E_ALL);

function recursive_keys($input, $search_value = null){

    $output = ($search_value !== null ? array_keys($input, $search_value) : array_keys($input)) ;
    foreach($input as $sub){
        if(is_array($sub)){
            $output = ($search_value !== null ? array_merge($output, recursive_keys($sub, $search_value)) : array_merge($output, recursive_keys($sub))) ;
        }
    }
    return $output ;
}

function mergeArrays($arr1, $arr2){

    foreach($arr2 as $key => $value){

        if(array_key_exists($key, $arr1) && is_array($value)) {
            $arr1[$key] = mergeArrays($arr1[$key], $arr2[$key]);
        }else{
            $arr1[$key] = $value;
        }
    }

    return $arr1;
}

function varFromKeys($ar,$val){

    $res = array();
    $ref = &$res;
    foreach ($ar as $key) {
        $ref[$key] = array();
        $ref = &$ref[$key];
    }

    $ref = $val;

    return $res;
}

$_FILES['picture']['name'][8][4][2] = 'img.jpg';
$_FILES['picture']['tmp_name'][8][4][2] = 'abcd';
$_FILES['picture']['size'][8][4][2] = '50';

$_FILES['contract']['name'][5][10][6][3] = 'contract.txt';
$_FILES['contract']['tmp_name'][5][10][6][3] = 'efgh';
$_FILES['contract']['size'][5][10][6][3] = '200';

$_FILES['contract']['name'][5][10][6][4] = 'contract2.txt';
$_FILES['contract']['tmp_name'][5][10][6][4] = 'ijkl';
$_FILES['contract']['size'][5][10][6][4] = '300';

$myFiles=array();
foreach($_FILES as $nameKey => $name){
    foreach($name as $propKey => $prop){

        $keys=array_merge(array($nameKey),recursive_keys($_FILES[$nameKey][$propKey]),array($propKey));
        /*
        echo "<pre>";
        print_r($keys);
        echo "</pre>";
        */
        $var=varFromKeys($keys,'xxx');
        $myFiles=mergeArrays($myFiles,$var);
    }
}

echo "<pre>";
print_r($myFiles);
echo "</pre>";


?>
使用嵌套循环


那么,您的尝试在哪里呢?我首先想到的是使用多个循环。我想知道这是否可能。我添加了一次尝试。在删除旧条目的循环中出现了一些错误,我现在修复了它们。我添加了一个演示,演示了它的工作原理。它与$_文件['picture']一起工作,但与$_文件['contract']一起工作,在任务描述中查看它不工作。。。
$keys = array_keys($_FILES['picture']);

foreach ($_FILES['picture']['name'] as $i => $subarray1) {
    foreach ($subarray1 as $j => $subarray2) {
        foreach ($subarray2 as $k => $file) {
            foreach ($keys as $key) {
                $_FILES['picture'][$i][$j][$k][$key] = $_FILES['picture'][$key][$i][$j][$k];
            }
        }
    }
}
// Remove the old entries
foreach ($keys as $key) {
    unset ($_FILES['picture'][$key]);
}