2013-05-15 69 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