Preg匹配$ _FILES

时间:2016-03-02 14:32:07

标签: php preg-match

我想从$ _FILES捕获扫描,因为总会传递一个空的扫描输入名称,而其他的varry会发生变化,我需要获取$ _FILES名称和数字。你对如何做到这一点有什么建议吗?

// Skipping the empty scan, and getting the 0-100 possible
$results = preg_grep('/^scan\d{1,2}$/', $_FILES);

生成数组到字符串转换错误

转储后广告

["scan0"]=>
  array(5) {
    ["name"]=>
    string(6) "2.jpeg"
    ["type"]=>
    string(10) "image/jpeg"
    ["tmp_name"]=>
    string(24) "C:\xampp\tmp\phpD7B4.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(24618)
  }
  ["scan1"]=>
  array(5) {
    ["name"]=>
    string(6) "2.jpeg"
    ["type"]=>
    string(10) "image/jpeg"
    ["tmp_name"]=>
    string(24) "C:\xampp\tmp\phpD7B5.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(24618)
  }
  ["scan"]=>
  array(5) {
    ["name"]=>
    string(0) ""
    ["type"]=>
    string(0) ""
    ["tmp_name"]=>
    string(0) ""
    ["error"]=>
    int(4)
    ["size"]=>
    int(0)
  }

2 个答案:

答案 0 :(得分:1)

请注意array_filter with flag仅适用于PHP版本> = 5.6

$scans = array_filter($_FILES, function ($key, $scan) {
    return $key != 'otherscan' && !empty($scan['name']);
}, ARRAY_FILTER_USE_BOTH);

$names = array_combine(
    array_keys($scans),
    array_map(function ($scan) {
        return $scan['size'];
    }, $scans)
);

var_dump($names);

答案 1 :(得分:1)

$scankeys = [];

foreach($scans as $key => $scan)
{
  if(preg_match("/^scan[0-9]{1,2}$/", $key)){
    $scankeys[] = $key;
  }
}

我应该提到这比尝试组合多个数组操作函数以获得相同的结果更好。