PHP: tek bir birleştirilmiş diziye benzer dizeler dizisi daralt'ı

0 Cevap php

Tarihler (bir iş için saatleri) bir dizi çalışma. Ben onların kısacık olası form onları yoğunlaşmasına istiyorum.

Şimdiye kadar, ben bu yapı ile başladı

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
)

Ne elde etmek istiyorum şudur:

Array
(
    [Mon-Fri] => 12noon-2:45pm, 5:30pm-10:30pm
    [Sat] => 12noon-11pm
    [Sun] => 12noon-9:30pm
)

Ben bir özyinelemeli işlevi yazma denedim ve şimdiye kadar çıktı Bu başarmış:

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
)

Herkes değerlerini karşılaştırarak ve benzer konum anahtarları birleştiren basit bir şekilde görebilir miyim? Çok şık değil - Benim recursive fonksiyon temelde iki iç içe foreach() döngüler olduğunu.

Thanks, Matt

EDIT: İşte benim kod şimdiye kadar, (giriş olarak ilk birinden) Yukarıda 3. dizi üretir bulunuyor:

$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++;

}

0 Cevap