2016-03-02 49 views
0

我想从$ _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) 
    } 
+0

你到目前为止尝试过什么?您是否已经尝试使用'foreach'循环迭代'$ _FILES'并使用[preg_match](http://php.net/manual/en/function.preg-match.php)来提取名称和数字你的文件? –

+0

要尝试一下,想在preg_match之后做到这一点 –

+0

需要首先得到[scan0]之类的东西。 –

回答

1
$scankeys = []; 

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

我笑我们提到这比试图结合多个数组操作函数来获得相同的结果要好。

1

请注意:array_filter与标志只能用于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); 
+0

嗯,我不想获得$ scan ['name'],我想获得它上面的密钥,所以scan0数组,这就是为什么我只想获得$ _FILES ['/^scan \ d {1, 2} $ /'] like –

+0

回答更新.. –

+0

这可能是好的,但正如我所说的,我需要获取元素名称而不是名称本身。 –