当前位置: 首页 > 知识库问答 >
问题:

在PHP中从逗号分隔的值生成一周的天数

彭展
2023-03-14

我在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则应显示为“Mon-Sun”。

1,2,3,4,5那么它应该显示为“Mon-Fri”。

1,2,4,5,6然后它应该显示“星期一-星期二,星期四-星期六”

1,3,5,7然后它应该显示"星期一,星期三,星期五,太阳"

下面的代码将只为系列1,2,3,4,5生成“Mon-Tue-Wed-Thu-Fri”

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

共有2个答案

冯通
2023-03-14

它很笨重,但很管用。

$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 );
}
微生令
2023-03-14

Foreach循环中删除其他,如下所示

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-Frifor1,2,3,4,5

 类似资料:
  • 问题内容: 我的数据库中有列,其中的值如下所示: 在虚拟列中没有任何编号。逗号分隔的值可以出现。我尝试了以下查询,但它正在创建重复的结果。 我不明白这个问题。谁能帮忙? 问题答案: 非常适合我- 还有许多其他方法可以实现它。阅读将单个逗号分隔的字符串拆分成行。 *关于使用列而不是单个字符串值时的重复项的 *更新 。只见PRIOR子句中使用DBMS_RANDOM的摆脱循环回路的在这里 尝试以下方法

  • 问题内容: 我有一个其中有很多记录的记录,我想知道其中有多少个名字,以及其中一个名字多少时间。 表名 我想找到多少个名字及其数量。 预期的输出应该是这样的 帮助我解决它。 问题答案: 结果:

  • 问题内容: 我正在从存储过程中调用Scalar UDF以获取列值。在标量UDF内,我有一个xml,并且必须获取特定节点的逗号分隔值。我使用了Cross apply,但是它导致了巨大的性能瓶颈,因为存储过程实际上是用来获取报告的。 有一个[旅行者]表,其中包含字段ID,BookingID(可以重复)和FareDetails。在FareDetails内部,我们存储xml。 UDF内部的逻辑如下:第一解

  • 问题内容: 我在MySQL中有一个函数,该函数返回由逗号分隔的整数值列表,从而形成一个字符串。 例如 退货 这是后端(Java)所需的简单功能-但是现在,由于建议了新功能,我需要这些结果用于另一个查询,该查询可能正在使用 IN 关键字遍历这些查询,如下所示: 作为单个csv元素,MyFunction(23)的结果不可迭代。如果我可以使用某些函数,例如可以生成结果的函数,则以下内容将非常适合我的查询

  • 我如何修改我的regex来为那些以“”或“,”开头,以“”或“,”结尾的字符串返回false

  • 我在文本文件中有以下内容要导入ArrayList: 澳大利亚,2 加纳,4 中国,3 西班牙,1 我的ArrayList由来自另一个类Team的对象组成,该类具有TeamName和排名字段。我可以获取以下内容以将String和int导入团队名称,但我无法分离应该是团队排名的数字: 我猜我必须在该行的某个地方使用拆分,或者将字符串转换为整数??