날짜 배열로 작업하기 (비즈니스를위한 개업 시간). 나는 가능한 한 가장 간단한 형태로 그들을 응축시키고 싶다.PHP : 유사한 문자열을 하나의 병합 된 배열로 압축
지금까지 내가 무엇을 달성하고자하는 것은 이것이다이 구조
Array
(
[Mon] => 12noon-2:45pm, 5:30pm-10:30pm
[Tue] => 12noon-2:45pm, 5:30pm-10:30pm
[Wed] => 12noon-2:45pm, 5:30pm-10:30pm
[Thu] => 12noon-2:45pm, 5:30pm-10:30pm
[Fri] => 12noon-2:45pm, 5:30pm-10:30pm
[Sat] => 12noon-11pm
[Sun] => 12noon-9:30pm
)
로 시작 : 나는 재귀 함수를 작성 시도하고이 때문에 출력 관리가
Array
(
[Mon-Fri] => 12noon-2:45pm, 5:30pm-10:30pm
[Sat] => 12noon-11pm
[Sun] => 12noon-9:30pm
)
멀리 :
Array
(
[Mon-Fri] => 12noon-2:45pm, 5:30pm-10:30pm
[Tue-Fri] => 12noon-2:45pm, 5:30pm-10:30pm
[Wed-Fri] => 12noon-2:45pm, 5:30pm-10:30pm
[Thu-Fri] => 12noon-2:45pm, 5:30pm-10:30pm
[Sat] => 12noon-11pm
[Sun] => 12noon-9:30pm
)
누구나 값을 비교하고 키를 결합하는 간단한 방법을 볼 수 있습니다. 그들은 비슷하니? 내 재귀 함수는 기본적으로 두 개의 중첩 된 foreach()
루프입니다. 매우 우아하지는 않습니다.
감사합니다, 매트
편집 : 나는 없다고 생각
$last_time = array('t' => '', 'd' => ''); // blank array for looping
$i = 0;
foreach($final_times as $day=>$time) {
if($last_time['t'] != $time) { // it's a new time
if($i != 0) { $print_times[] = $day . ' ' . $time; }
// only print if it's not the first, otherwise we get two mondays
} else { // this day has the same time as last time
$end_day = $day;
foreach($final_times as $day2=>$time2) {
if($time == $time2) {
$end_day = $day2;
}
}
$print_times[] = $last_time['d'] . '-' . $end_day . ' ' . $time;
}
$last_time = array('t' => $time, 'd' => $day);
$i++;
}
문제가 잘못 정의되었습니다. 프로그램이 화요일이 월 이후에 오는 것을 알기로되어 있습니까? "Mon-Tue, Fri"는 유효한 세트입니까? 접는 규칙은 정확히 무엇입니까? 거기에서 시작해야하며, 구현이 더 분명해질 것입니다. – Artefacto
지금까지 사용하고있는 기능을 우리에게 보여줄 수 있습니까? – Cetra
흠, 좋은 지적. 지능형 일 필요는 없습니다. 예를 들어 Mon, Tue, Wed, Thu 및 Fri의 값이 모두 같은 경우 첫 번째 및 마지막 키 (월 및 금)를 연결해야합니다. 네 말이 맞지만 "월 - 화, 금"도 유효해야합니다. 나는 그것을 통해 또 다른 생각을 가질 것입니다 ... –