我嘗試編寫改變多維$ _FILES結構的通用方法。
例如,我們有:
$_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
解決方案應與所有可能的$ _FILES工作。 請任何想法?
編輯:這是我的一個嘗試。
它適用於$ _FILES ['picture'],它不適用於$ _FILES ['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>";
?>
那麼,哪裏是你試試? –
我來id使用多個循環的第一件事。我想知道這是否可能。 –
我添加了一個我的嘗試。 – Petr