代码之家  ›  专栏  ›  技术社区  ›  ST80

PHP比较两个日期数组并检查是否匹配

  •  2
  • ST80  · 技术社区  · 6 年前

    我想要两个 arrays 和我想比较的日期对象。第一个数组包含今天的日期和接下来的五天:

    $today = date('Y-m-d');
    $fiveDays = [];
    for($i=0; $i <= 5; $i++){
        $today = date('Y-m-d', strtotime('+1 day', strtotime($today)));
        $fiveDays[] = date('Y-m-d', strtotime($today));
    }
    

    结果是:

    0: "2018-09-14"
    1: "2018-09-15"
    2: "2018-09-16"
    3: "2018-09-17"
    4: "2018-09-18"
    5: "2018-09-19"
    

    [{
       days: (4) ["2018-09-13", "2018-09-14", "2018-09-15", "2018-09-16"]
       duration: 4
       end: "2018-09-16"
       name: "vacation blabla"
       start: "2018-09-13"
    },
    {
       days: (5) ["2018-09-20", "2018-09-21", "2018-09-22", "2018-09-23", "2018-09-24"]
       duration: 5
       end: "2018-09-24"
       name: "vacation blabla"
       start: "2018-09-20"
    }]
    

    现在,我想检查第一个数组的某个日期/日期是否将在vacations\u数组中。我怎样才能做到这一点?

    编辑

    当找到匹配项时,必须将匹配项为真的第二个数组(带假期)分配给 $vacation

    3 回复  |  直到 6 年前
        1
  •  1
  •   Dieter Kräutl    6 年前

    你也可以这样做:

    $result_array = array();
    $found = false;
    for($i=0; $i<count($vacation_array); $i++) {
      $found = false;
      for($j=0; $j<count($vacation_array[$i]['days']); $j++) {
        if(in_array($vacation_array[$i]['days'][$j], $array_1) && !$found) {
          $result_array[] = $vacation_array[$i];
          $found = true;
        }
      }
    }
    print_r($result_array);
    
        2
  •  2
  •   Dieter Kräutl    6 年前

    基本上,在数组2的一个循环中执行此操作:

    $array_of_same_elements = array_intersect($array_1, $array_2[$i]['days']);
    

    https://www.w3schools.com/php/func_array_intersect.asp

        3
  •  0
  •   Steve Kirsch    6 年前

    它有点简单,但可能适合您的需要:

    $event1 = ['days'=>["2018-09-13", "2018-09-14", "2018-09-15", "2018-09-16"]];
    $event2 = ['days'=>["2018-09-20", "2018-09-21", "2018-09-22", "2018-09-23", "2018-09-24"]];
    
    function checkEvents($ev1, $ev2){
        foreach($ev1 AS $day){
           if(in_array($day, $ev2)){
              return $day." is found in both events\n";
           }
        }
        return "no match found\n";
    }
    
    echo checkEvents($event1['days'], $event2['days']);