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"등)을 전환 할 수 없습니다. 어떤 아이디어?
** 업데이트 : ** Michael이 제안한대로 코드를 추가 / 수정 했으므로 이제 코드가 다음과 같이 보입니다.
$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));
잘 작동하는 것 같지만 페이지 상단에 다음 두 오류가 표시됩니다. "경고 : sort ()는 매개 변수 1이 배열이 될 것으로 예상하고, null이 주어집니다." "경고 : array_pop ()은 매개 변수 1이 배열이 될 것으로 예상하고, null이 주어짐" . 다음과 같이 $ weeklies_latest 배열을 호출합니다.
<a href="/COMM/email/weekly/<? echo $weeklies_latest[$template->State] ?>/weekly.html" class="button-link button-link-blue">CURRENT ISSUE</a>
코드를 더 읽기 쉽게 만들기 때문에 일반적으로 두 단계로 수행합니다.
우선은의 조합을 사용하여, 상태에 따라 결과를 준비 array_fill_keys
하고array_map
// Prepare result
$weeklies = array_fill_keys(array_map(function ($item) {
return substr($item, -2);
}, $input), []);
이것은 빈 배열을 가리키는 키로 상태를 갖는 배열을 빌드합니다. 다음 단계에서 다시 한 번 모든 요소를 "워크"한 다음 적절한 상태 배열에 추가합니다.
// Split into state arrays
array_walk($input, function ($item) use (&$weeklies) {
$state = substr($item, -2);
$weeklies[$state][] = $item;
});
(이것이 한 단계에서 어떻게 수행 될 수 있는지 알 수 있습니까? 선호하는 경우 foreach
대신 사용할 수 있습니다 array_walk
)
이제 다음과 같이 남았습니다.
Array
(
[NY] => Array
(
[0] => 20151227NY
[1] => 20151226NY
[2] => 20151221NY
[3] => 20140313NY
[4] => 20140228NY
[5] => 20140227NY
[6] => 20140123NY
[7] => 20140102NY
)
[CT] => Array
(
[0] => 20151125CT
[1] => 20140226CT
[2] => 20140122CT
)
[NH] => Array
(
[0] => 20140226NH
)
[NJ] => Array
(
[0] => 20140128NJ
[1] => 20140121NJ
[2] => 20131231NJ
)
)
각 상태에 대한 최신 정보를 선택하려면 파일 시스템에서 순서를 보장 할 수 없기 때문에 날짜를 정렬해야합니다 (데이터에서 보임). 정렬 후 우리는 마지막에 하나를 선택합니다. array_pop
하루가 실패했거나 그렇지 않은 일주일이 있기 때문에 나는 사용 하고 있으므로 완벽한 데이터에 의존하지 않는 것이 좋습니다.
$weeklies_latest = array_combine(array_keys($weeklies), array_map(function ($item) {
sort($item);
return array_pop($item);
}, $weeklies));
array_combine
PHP에는 array_map
연관 배열 에서 작동 하는 내장 기능이 없기 때문에 사용 하고 있습니다.
$weekly_latest
이제 다음이 포함됩니다.
Array
(
[NY] => 20151227NY
[CT] => 20151125CT
[NH] => 20140226NH
[NJ] => 20140128NJ
)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다