2017-03-07 90 views
1

我正在顯示使用glob的文件,而且我不想手動輸入要使用array_diff在元素中刪除的每個文件名,我在尋找通過搜索具有數字的文件名並去除這些元素來改進這一點的其他方法。PHP:array_diff刪除字符串中沒有數字字符的所有元素

$dirs = 'D:/'.$type_of_store.'/LAB/'.$theSub.'/'.$subSub;      
$theDirs = array_diff(glob($dirs.'/*.xml', GLOB_BRACE), 
array(
'.', 
'..', 
'D:/'.$type_of_store.'/LAB/'.$theSub.'/'.$subSub.'/PosDataUpdatesStatus.xml', 
CommCenterManagerConfig.xml, 
ExternalReferences.xml 
) 
); 

文件輸出

CommCenterManagerConfig 
ExternalReferences 
PosDataUpdates-2016-10-27 094721 
PosDataUpdates-2016-11-21 104425 
PosDataUpdates-2016-11-21 110226 
PosDataUpdates-2016-11-22 014654 
PosDataUpdates-2016-11-22 062805 

是否有其他的方法來搜索字符串,具有數量和數組元素刪除它?

我的文件應該顯示僅包含串號

PosDataUpdates-2016-10-27 094721 
PosDataUpdates-2016-11-21 104425 
PosDataUpdates-2016-11-21 110226 
PosDataUpdates-2016-11-22 014654 
PosDataUpdates-2016-11-22 062805 

回答

2

爲什麼不乾脆的「grep」通過輸入?我建議你嘗試匹配更精確一點,以防止未來的驚喜...

看看這個簡單的例子:

<?php 
$folders = [ 
    '.', 
    '..', 
    'CommCenterManagerConfig', 
    'ExternalReferences', 
    'PosDataUpdates-2016-10-27 094721', 
    'PosDataUpdates-2016-11-21 104425', 
    'PosDataUpdates-2016-11-21 110226', 
    'PosDataUpdates-2016-11-22 014654', 
    'PosDataUpdates-2016-11-22 062805', 
]; 
$pattern = '/^PosDataUpdates-[0-9-]{4}-[0-9-]{2}-[0-9-]{2}\s[0-9]{6}$/'; 
print_r(preg_grep($pattern, $folders)); 

上述例子的輸出是:

Array 
(
    [2] => PosDataUpdates-2016-10-27 094721 
    [3] => PosDataUpdates-2016-11-21 104425 
    [4] => PosDataUpdates-2016-11-21 110226 
    [5] => PosDataUpdates-2016-11-22 014654 
    [6] => PosDataUpdates-2016-11-22 062805 
) 

如果您應用策略,以你的文件系統訪問任務,然後就這麼簡單的東西會結果:

<?php 
define('BASEDIR', './data/'); 
$folders = glob(BASEDIR . '*.xml'); 
$pattern = '/PosDataUpdates-[0-9-]{4}-[0-9-]{2}-[0-9-]{2}\s[0-9]{6}/'; 
print_r(preg_grep($pattern, $folders)); 

的輸出將是:

Array 
(
    [2] => ./data/PosDataUpdates-2016-10-27 094721.xml 
    [3] => ./data/PosDataUpdates-2016-11-21 104425.xml 
    [4] => ./data/PosDataUpdates-2016-11-21 110226.xml 
    [5] => ./data/PosDataUpdates-2016-11-22 014654.xml 
    [6] => ./data/PosDataUpdates-2016-11-22 062805.xml 
) 

顯然的路徑和文件擴展名的問題,可以根據需要加以解決。

相關問題