繁体   English   中英

PHP如果找到特定值范围,则从主数组中删除子数组

[英]PHP Remove subarray from main array if specific value range is found

可以说我有以下数组:

  [9] => Array
    (
        [0] => Bob Smith
        [1] => bobsmith@gmail.com
        [2] => Helsinki
        [3] => 10
        [4] => 34
        [5] => 2014-05-12
    )

[10] => Array
    (
        [0] => John Smith
        [1] => johnsmith@domain.com
        [2] => some values
        [3] => 9
        [4] => 67
        [5] => 2014-05-15
    )

[11] => Array
    (
        [0] => Clarke Kent
        [1] => ckent@superman.com
        [2] => Crystal
        [3] => 9
        [4] => 89 
        [5] => 2014-05-16
    )

如果日期超出特定范围,我想删除子数组怎么办? 因此,如果我说想查找日期在2014-05-14和2014-05-28之间的数据。 然后,(新)数组将打印以下内容:

 [10] => Array
    (
        [0] => John Smith
        [1] => johnsmith@domain.com
        [2] => some values
        [3] => 9
        [4] => 67
        [5] => 2014-05-15
    )

[11] => Array
    (
        [0] => Clarke Kent
        [1] => ckent@superman.com
        [2] => Crystal
        [3] => 9
        [4] => 89 
        [5] => 2014-05-16
    )

我想到了以下内容:

 foreach ($array as $row) {
     if($row[5] >= '2014-05-14' && $row[5] <= '2014-05-14') {
    // Do Something // e.g. unset subarray?
  }

}

或者我应该以不同的方式来处理它并遍历数组,如果子数组符合我的条件,则创建一个新数组。 结果是一个包含子数组的数组,这些子数组包含符合我的日期范围的日期。 我希望这是有道理的,我正在尝试找到最有效的方法。

谢谢

对于描述的用例,我个人将使用array_filter

$start_date = DateTime::createFromFormat('Y-m-d', '2014-05-14');
$end_date = DateTime::createFromFormat('Y-m-d', '2014-06-14');

$filtered_array = array_filter($array, function($row) use ($start_date, $end_date) {
                      $date = DateTime::createFromFormat('Y-m-d', $row[5]);
                      return $date >= $start_date && $date <= $end_date;
                  });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM