我已经创建了一个函数来处理sinlge文件上传和多个文件上传,以便在检测到多个文件上传时,不使用PHP的默认数组设置,并创建一个更易于管理的数组。
多个文件HTML:
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="file" name="userFile[]" class="userFile">
<input type="file" name="userFile[]" class="userFile">
<input type="file" name="userFile[]" class="userFile">
<input type="submit" name="submit" value="Upload">
</form>
备用单个文件HTML:
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="file" name="userFile" class="userFile">
<input type="submit" name="submit" value="Upload">
</form>
PHP:
function checkUploadedFile()
{
$file;
$files;
$file_arr_keys;
foreach($_FILES as $element) {
if (is_array($element['name'])) {
$file_count = count($element['name']);
$file_arr_keys = array_keys($element);
for ($i = 0; $i < $file_count; $i++) {
foreach ($file_arr_keys as $key) {
$files[$i][$key] = $element[$key][$i];
}
}
} else {
$file = $element;
}
}
if (isset($file)) return $file;
return $files;
}
如果使用多个文件表单并且只上传了一个文件,则会创建类似这样的内容:
Array
(
[0] => Array
(
[name] => IMG_0015.JPG
[type] => image/jpeg
[tmp_name] => /Applications/XAMPP/xamppfiles/temp/phpMEaSSc
[error] => 0
[size] => 5191142
)
[1] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)
[2] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)
)
问题:如果其他文件元素为空,如何更改上面的输出数组以使其只有一个元素?如:
Array
(
[0] => Array
(
[name] => IMG_0015.JPG
[type] => image/jpeg
[tmp_name] => /Applications/XAMPP/xamppfiles/temp/phpMEaSSc
[error] => 0
[size] => 5191142
)
)
答案 0 :(得分:2)
只需通过array_filter()功能
过滤您的数组$filtered = array_filter($files, function($file){
return $file['error'] === 0;
});
知道了! :)
答案 1 :(得分:0)
好吧,通过比较你的数组,似乎每个空文件都有不同的值。你可以使用它们中的任何一个。
迭代$ files数组,如果满足任何bool大小,错误,名称和/或类型为空或0,请使用unset()函数将其从数组中删除。
EG
foreach ($files as $key => $file) {
if ($file['size'] == 0) {
unset($files[$key]);
}
}
或者你可以将这个逻辑调整到上面的函数中,而不是在第一时间设置它。
答案 2 :(得分:0)
您可以忽略循环中的空文件。 将您的php文件更改为:
function checkUploadedFile()
{
$file;
$files;
$file_arr_keys;
foreach($_FILES as $element) {
if (is_array($element['name'])) {
$file_count = count($element['name']);
$file_arr_keys = array_keys($element);
for ($i = 0; $i < $file_count; $i++) {
if(!$element[name][$i]){
next;
}
foreach ($file_arr_keys as $key) {
$files[$i][$key] = $element[$key][$i];
}
}
} else {
$file = $element;
}
}
if (isset($file)) return $file;
return $files;
}