mpyw is right, PSR-7 is awesome but a little overkill for simple projects (in my opinion).
Here's an example of function that returns the file upload metadata in a (PSR-7 *like*) normalized tree. This function deals with whatever dimension of upload metadata.
I kept the code extremely simple, it doesn't validate anything in $_FILES, etc... AND MOST IMPORTANTLY, it calls array_walk_recursive in an *undefined behaviour* way!!!
You can test it against the examples of the PSR-7 spec ( https://www.php-fig.org/psr/psr-7/#16-uploaded-files ) and try to add your own checks that will detect the error in the last example ^^
<?php
/**
* THIS CODE IS ABSOLUTELY NOT MEANT FOR PRODUCTION !!! MAY ITS INSIGHTS HELP YOU !!!
*/
function getNormalizedFiles()
{
$normalized = array();
if ( isset($_FILES) ) {
foreach ( $_FILES as $field => $metadata ) {
$normalized[$field] = array(); // needs initialization for array_replace_recursive
foreach ( $metadata as $meta => $data ) { // $meta is 'tmp_name', 'error', etc...
if ( is_array($data) ) {
// insert the current meta just before each leaf !!! WRONG USE OF ARRAY_WALK_RECURSIVE !!!
array_walk_recursive($data, function (&$v,$k) use ($meta) { $v = array( $meta => $v ); });
// fuse the current metadata with the previous ones
$normalized[$field] = array_replace_recursive($normalized[$field], $data);
} else {
$normalized[$field][$meta] = $data;
}
}
}
}
return $normalized;
}
?>