从 PHP 中的逗号分隔值生成星期几


Generate days of week from comma separated values in PHP

我在PHP中有一个数组,用于存储日期值

$days = array (
    1 => 'Mon', 
    2 => 'Tue',
    3 => 'Wed',
    4 => 'Thu',
    5 => 'Fri',
    6 => 'Sat',
    7 => 'Sun'
);

我有一个逗号分隔的值,表示变量$days的键。如果系列是

1,2,3,4,5,6,7,然后它应该显示为"周一 - 周日"。

1,2,3,4,5 然后它应该显示为"周一至周五"。

1,2,4,5,6 然后它应该显示"周一 - 周二,周四 - 周六"

1,3,5,7 然后它应该显示"周一,周三,周五,周日"

下面的代码将仅为系列 1,2,3,4,5 生成"周一 - 周二 - 周三 - 周四 - 周五"

    $keys  = "1,2,3,4,5,6";
    $days = array('1' => 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');
    $key_array = explode(',', $keys);
    $day_series = $first_day = $days[reset($key_array)];
    $first_value = reset($key_array);
    foreach ($key_array as $key => $value) {
        if ($first_value != $value) {
            if ($value == $i) {
               $day_series = $day_series . ' - ' . $days[$value];
            } else
                $day_series = $day_series  . ', ' . $days[$value];
        }
        $i++;
    }
    echo $day_series;

这样从foreach循环中删除else

foreach ($key_array as $key => $value) {
        if ($first_value != $value) {
            if ($value == $i) {
               $day_series = $day_series . ' - ' . $days[$value];
            }         
        $i++;
        }
    }
    $day_series = $day_series  . ', ' . $days[$value];
    echo $day_series;

这应该可以为您提供Mon-Fri 1,2,3,4,5

它很笨重,但它有效。

$DAY_NUMBER = array( 'Mon' => 0, 'Tue' => 1, 'Wed' => 2, 'Thu' => 3, 'Fri' => 4, 'Sat' => 5, 'Sun' => 6 );
$NUMBER_DAY = array( 0 => 'Mon', 1 => 'Tue', 2 => 'Wed', 3 => 'Thu', 4 => 'Fri', 5 => 'Sat', 6 => 'Sun' );

function day_series ( $day_list ) {
        global $DAY_NUMBER, $NUMBER_DAY;
        // CONVERT DAY NAMES TO NUMBERS
        $num_list = array();
        for( $n = 0; $n < count($day_list); $n++ ) {
                $num_list[] = $DAY_NUMBER[$day_list[$n]];
        }
        // ALLOW FOR WRAP AROUND
        $first = $num_list[0];
        for( $n = 0; $n < count($num_list); $n++ ) {
                if( $num_list[$n] < $first ) {
                        $num_list[$n] += 7;
                }
        }
        $day_series = array();
        while( !empty($num_list) ) {
                $first = $last = array_shift($num_list);
                while( !empty($num_list) && ( $last+1 == $num_list[0] ) ) {
                        $last = array_shift($num_list);
                }
                if( $first == $last ) {
                        $day_series[] = $NUMBER_DAY[ $first % 7 ];
                } else if( $first+1 == $last ) {
                        $day_series[] = $NUMBER_DAY[ $first % 7 ] . ',' . $NUMBER_DAY[ $last % 7 ];
                } else {
                        $day_series[] = $NUMBER_DAY[ $first % 7 ] . '-' . $NUMBER_DAY[ $last % 7 ];
                }
        }
        // RETURN AS JOINED STRING
        return join(',', $day_series );
}