2013-05-15 73 views
0

我有一个数组,该数组项包含文件的名称和数组值将是包含sfile大小另一个数组,日期等PHP:阵列从阵列变量除去specifed键

在这些数组列表,我想要仅存储xlsxlsx文件。我需要删除所有其他扩展名的文件。

PHP中是否有预定义的函数?

注:我有恒定变量此varaible包含等VAR_FILE_EXT =“XLS,XLSX,CSV”

[sample.xls] => Array (
      [size] => 3353 
      [uid] => 1012 
      [gid] => 1013 
      [permissions] => 33188 
      [atime] => 1338497357 
      [mtime] => 1338497357 
      [type] => 1 
     ) 

[sample.csv] => Array (
      [size] => 3353 
      [uid] => 1012 
      [gid] => 1013 
      [permissions] => 33188 
      [atime] => 1338497357 
      [mtime] => 1338497357 
      [type] => 1 
     ) 

[sample.txt] => Array (
      [size] => 3353 
      [uid] => 1012 
      [gid] => 1013 
      [permissions] => 33188 
      [atime] => 1338497357 
      [mtime] => 1338497357 
      [type] => 1 
     ) 
在这个例子中我想要只删除sample.txt的数组键和与其对应的值

+0

你如何存储你的文件名? – Voitcus

+0

是的,只有在这些验证 – Bharanikumar

+0

我的意思是存储在一些数组与键具有文件名例如。 'array('sample.xls'=> array(...),'sample.csv'=> array(...)'? – Voitcus

回答

1
$filtered = array_intersect_key(
    $array, 
    array_filter(array_keys($array), function ($name) { return preg_match('/\.xlsx?$/', $name); }) 
); 
1
$your_array = array(
    'sample.xls' => ... 
    'sample.csv' => ... 
    'sample.txt' => ... 
); 

$extensions = '/('.str_replace(', ', '|', $VAR_FILE_EXT).')$/i'; 
$new_array = array(); 

foreach ($your_array as $file => $stuff) { 
    if (preg_match($extensions, $file)) { 
     $new_array[$file] => $stuff; 
    } 
} 

然后使用$ new_array。

+0

所以如果我有1000个文件在数组中,那么循环将循环1000次,以及我不想在这里pregmatch,withjust路径我可以得到扩展....但我不想轮1000时间,我想用一些数组函数与外部作为参数,应采取过滤 – Bharanikumar

+0

你必须循环即使你使用PHP提供的函数,它会在t上循环他阵列。你可以做的是,如果你只需要一次数组,就是在我提供的代码的“foreach”中执行你的过程。然后你不需要循环两次(一个过滤,另一个处理数组)。 – Nuno