我有一個從scandir()創建的desc數組。下面是該陣列的一個小例子:從包含特定字符串的數組創建數組
[7] => 20151227NY [8] => 20151226NY [9] => 20151221NY [10] => 20151125CT [11] => 20140313NY [12] => 20140228NY [13] => 20140227NY [14] => 20140226NH [15] => 20140226CT [16] => 20140128NJ [17] => 20140123NY [18] => 20140122CT [19] => 20140121NJ [20] => 20140102NY [21] => 20131231NJ
這些是使用YearMonthDateState命名的所有文件夾。我需要一種方法來抓取所有包含「NY」,「CT」,「NJ」,「NH」的文件夾,並將它們放入按desc順序排列(最新日期優先)的單獨數組中。這樣,我可以根據最新日期(它在文件夾名稱中)獲取我需要的文件。我試過這個:
//GET WEEKLY FOLDER
$weekly_dir = "../email/weekly/";
$weekly_files = scandir($weekly_dir, $sorting_order = 1);
$weekly_index = $weekly_files[7];
$weekly_state = substr($weekly_index, 8,2);
$new_weekly = str_replace($weekly_state, $template->State, $weekly_index);
echo $new_weekly;
但不幸的是,不是每個新的「每週」都在同一天上傳。所以我不能在最後切換狀態字符串(「NY」「NH」等)。有任何想法嗎?
**更新**我已經添加/修改了代碼由邁克爾的建議,所以我的代碼現在看起來像這樣:
$weekly_dir = "../email/weekly/";
$weekly_file_array = scandir($weekly_dir, $sorting_order = 1);
$index = $weekly_file_array;
// Prepare result
$weeklies = array_fill_keys(array_map(function ($item) {
if (substr($item, -2) == 'NY'){
return substr($item, -2);
}
}, $index),$item);
// Split into state arrays
array_walk($index, function ($item) use (&$weeklies) {
$state = substr($item, -2);
$weeklies[$state][] = $item;
});
$weeklies_latest = array_combine(array_keys($weeklies), array_map(function ($item) {
sort($item);
return array_pop($item);
}, $weeklies));
似乎工作得很好,但我在得到這兩個錯誤頁的頂部: 「警告:排序()預計參數1是陣列,空給出」 「警告:array_pop()預計參數1是陣列,空給出」。我打電話給這樣的$ weeklies_latest數組:
<a href="/COMM/email/weekly/<? echo $weeklies_latest[$template->State] ?>/weekly.html" class="button-link button-link-blue">CURRENT ISSUE</a>
可以提供一個例子:原始文件路徑=>數組實際結果=>所需的陣列結果 – fusion3k
上面的陣列結果是從DIR陣列I有一個實際excert。我希望他們成爲他們自己的數組,如下所示: $ ny_weekly = array('20151227NY','20151221NY','20151214NY'等等); $ ct_weekly = array('20151220CT','20151214CT','20151208CT'等...); 等... – Goten13