【问题标题】:from array output date from monday to friday从数组输出日期从星期一到星期五
【发布时间】:2021-02-23 22:39:24
【问题描述】:

我想从周一到周五以一周的基本格式输出以下数组,例如:

输出:

小米 06.01。 - 08.01 法。

月 11.01。 - 15.01 法郎。

有什么建议可以排除中间的工作日吗?

  [0]=>
  string(9) "Mi 06.01."
  [1]=>
  string(9) "Do 07.01."
  [2]=>
  string(9) "Fr 08.01."
  [3]=>
  string(9) "Mo 11.01."
  [4]=>
  string(9) "Di 12.01."
  [5]=>
  string(9) "Mi 13.01."
  [6]=>
  string(9) "Do 14.01."
  [7]=>
  string(9) "Fr 15.01."
  [8]=>
  string(9) "Mo 18.01."
  [9]=>
  string(9) "Di 19.01."
  [10]=>
  string(9) "Mi 20.01."
  [11]=>
  string(9) "Do 21.01."
  [12]=>
  string(9) "Fr 22.01."
  [13]=>
  string(9) "Mo 25.01."
  [14]=>
  string(9) "Di 26.01."
  [15]=>
  string(9) "Mi 27.01."
  [16]=>
  string(9) "Do 28.01."
  [17]=>
  string(9) "Fr 29.01."
}

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    您可以创建一个循环,去掉不需要的项目,然后构建一个新数组.. 可能是最简单的 ..

    <?php
    $old_array = array();
    
    $old_array[0] = "Mi 06.01.";
    $old_array[1] = "Do 06.01.";
    $old_array[2] = "Fr 06.01.";
    $old_array[3] = "Mi 06.01.";
    $old_array[4] = "Mo 06.01.";
    
    
    
    
    $new_array = array();
    foreach ($old_array as $item){
        if (strpos($item, 'Mo') !== false || // Checks if $item conains "Mo" 
            strpos($item, 'Mi') !== false) { // Checks if $item conains "Mi" 
            // push to new array
            array_push($new_array ,$item);
        }
    }
    print_r($new_array);
    

    $new_array 输出:

    Array
    (
        [0] => Mi 06.01.
        [1] => Mi 06.01.
        [2] => Mo 06.01.
    )
    

    这会稍微费点力——但实际上这是完成它的最简单方法。要获得你的“范围”,你可以创建一个带有“开始”和“结束”的函数并以这种方式进行比较,return 你的范围作为字符串或数组等......

    <?php
    $old_array = array();
    
    $old_array[0]= "Mi 06.01.";
    $old_array[1]= "Do 07.01.";
    $old_array[2]= "Fr 08.01.";
    $old_array[3]= "Mo 11.01.";
    $old_array[4]= "Di 12.01.";
    $old_array[5]= "Mi 13.01.";
    $old_array[6]= "Do 14.01.";
    $old_array[7]= "Fr 15.01.";
    $old_array[8]= "Mo 18.01.";
    $old_array[9]= "Di 19.01.";
    $old_array[10]= "Mi 20.01.";
    $old_array[11]= "Do 21.01.";
    $old_array[12]= "Fr 22.01.";
    $old_array[13]= "Mo 25.01.";
    $old_array[14]= "Di 26.01.";
    $old_array[15]= "Mi 27.01.";
    $old_array[16]= "Do 28.01.";
    $old_array[17]= "Fr 29.01.";
    
    
    $start_day = "Mi 06.01.";
    $end_day = "Fr 08.01.";
    
    $new_array = makeNewArray($old_array, $start_day, $end_day);
    print_r( $new_array );
    
    
    
    function makeNewArray($old_array, $start_day, $end_day){
        $new_array = array();
        foreach ($old_array as $item){
            if ($start_day == $item){
                $new_array['start'] = $item;
            }
            if ($end_day == $item){
                $new_array['end'] = $item;
            }
        }
        return $new_array;
    }
    

    输出:

    Array
    (
        [start] => Mi 06.01.
        [end] => Fr 08.01.
    )
    Start = Mi 06.01.
    End = Fr 08.01.
    

    【讨论】:

      【解决方案2】:

      如果我理解正确,您希望自动创建范围字符串。这应该这样做。提供的信息不多,所以我在做一些假设,例如日期的顺序已经正确。

      输出:

      array(4) {
      [0]=>
      string(21) "Mi 06.01. - Fr 08.01."
      [1]=>
      string(21) "Mo 11.01. - Fr 15.01."
      [2]=>
      string(21) "Mo 18.01. - Fr 22.01."
      [3]=>
      string(21) "Mo 25.01. - Fr 29.01."
      }
      

      内联解释:

      $date_ranges = [];
      $current_week_string = false;
      
      foreach ($dates as $date) {
      
          // unsure how to easily parse the german day abbreviations so i'll ignore them
          // with ?? and use the dates instead
          $datetime = DateTime::createFromFormat('?? d.m.', $date);
      
          // year-week e.g. 2021-01, to keep track of when we change to the next week
          $week_string = $datetime->format('Y-W');
      
          // still in the same week as the previous date. skip for now
          if ($current_week_string == $week_string) {
              $previous_date = $date;
              continue;
          }
      
          // create the date range (unless this is the first iteration)
          if ($current_week_string !== false) {
              $date_ranges[] = $start_of_week . ' - ' . $previous_date;
          }
      
          // reset everything for the next loop
          $start_of_week = $date;
          $current_week_string = $week_string;
          $previous_date = $date;
      }
      
      // create the range for the final date
      $date_ranges[] = $start_of_week . ' - ' . $date;
      
      var_dump($date_ranges);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-23
        • 2021-02-05
        • 2019-04-08
        • 2018-06-12
        • 2022-10-20
        相关资源
        最近更新 更多