Da PHP das $_FILES-Array bei mehrdimensionalen Feldnamen etwas merkwürdig organisiert bietet es sich an es zunächst umzustellen damit man mit dem Array vernünftig arbeiten kann. Das erledigt die folgende Funktion.
Die Idee stammt von PHP.net, ich habe den Code lediglich etwas straffer zusammengeschrieben und Kleinigkeiten ergänzt.
<?php
/**
$_FILES-Array umstellen.
*/
function rearrangeFILES(&$stack, $value=NULL, $key=NULL)
{
if ($key === NULL):
$stack = array();
foreach ($_FILES as $k1 => $v1):
$stack[$k1] = array();
foreach ($v1 as $k2 => $v2):
rearrangeFILES($stack[$k1], $v2, $k2);
endforeach;
endforeach;
return $stack;
else:
if (is_array($value)):
foreach ($value as $k => $v):
if (is_array($v)):
rearrangeFILES($stack[$k], $v, $key);
else:
$stack[$k][$key] = $v;
endif;
endforeach;
else:
$stack[$key] = $value;
endif;
endif;
}
print '<p>Um das Beispiel zu testen über das Formular zwei Dateien zum Upload
auswählen, hochladen und die Array-Struktur vergleichen.</p>';
print '<pre>';
print '<h2>Die Original-Struktur des FILES-Array</h2>';
print_r($_FILES);
print '<hr>';
rearrangeFiles($tmp);
print '<h2>Die modifizierte Struktur des FILES-Array</h2>';
print_r($tmp);
print '</pre>';
echo <<< EOT
<form method="post" enctype="multipart/form-data" action="{$_SERVER['REQUEST_URI']}">
<label>picture[x][y] </label><input type="file" name="picture[x][y]"><br />
<label>picture[a][b] </label><input type="file" name="picture[a][b]"><br />
<input type="submit"><br />
</form>
EOT;
?>