Php 如何获取范围内的数组元素
我正在尝试获取范围内的数组元素,但失败。下面解释一下Php 如何获取范围内的数组元素,php,arrays,Php,Arrays,我正在尝试获取范围内的数组元素,但失败。下面解释一下 $date_array = array('2012-08-02','2012-08-09','2012-08-16','2012-08-23'); $start_date = '2012-08-01'; $end_date = '2012-08-10'; 我想从$start\u date和$end\u date内的$date\u数组中获取数组元素。 i、 e,输出将为:2012-08-02和2012-08-09 编辑: 数组也可以是以下
$date_array = array('2012-08-02','2012-08-09','2012-08-16','2012-08-23');
$start_date = '2012-08-01';
$end_date = '2012-08-10';
我想从$start\u date和$end\u date内的$date\u数组中获取数组元素。
i、 e,输出将为:2012-08-02和2012-08-09
编辑:
数组也可以是以下数组
$date_array = array('2012-08-02','2012-08-10','2012-08-16','2012-08-23');
您可以使用满足您需要的回调函数和回调函数来完成此操作:
$filter = function($start, $end) {
return function($string) use ($start, $end) {
return $string >= $start && $string <= $end;
};
};
$result = array_filter($array, $filter('2012-08-01', '2012-08-10'));
$filter=函数($start,$end){
返回函数($string)使用($start,$end){
返回$string>=$start&&$string from=$from;
$this->to=$to;
如果($from>$to){
$this->reverse();
}
}
私有函数反向(){
列表($this->from,$this->to)=数组($this->to,$this->from);
}
公共职能(单位:$value){
返回$this->from range=$range;
父项::_构造($iterator);
}
公共功能接受()
{
$value=$this->getInnerIterator()->current();
返回$this->range->in($value);
}
}
$range=新范围($start,$end);
$it=新阵列计数器($array);
$filtered=新的RangeFilter($it,$range);
$result=迭代器到数组($filtered);
这很简单:
首先将日期字符串转换为时间戳以获取整数。下一步是可选的,您可以对它们进行排序。
最后,再次遍历日期(现在是整数)并收集所需的日期范围
执行此操作时,您可以将整数重新转换为旧日期格式 就这些。
不超过10行代码 好的,有些人想要一个例子。在这里:
// create a bunch of unsortable random dates-trash
$dates = array();
for($i = 0; $i < 100; $i ++)
$dates[] = date('Y-m-d', rand(1000, time()));
// first transform it to timestamp integers
// if strtotime don't makes it, you have to transform your datesformat
// as one more pre-step
foreach($dates as $k => $v)
$dates[$k] = strtotime($v);
// now and optional sort that (now finest) stuff
sort($dates);
// at last get the range of dates back
$datesInRange = array();
$dateStart = strtotime('1998-06-27');
$dateEnd = strtotime('2010-4-20');
foreach($dates as $date)
if($date >= $dateStart AND $date <= $dateEnd)
$datesInRange[] = date('Y-m-d', $date);
// have a look at the result
echo implode(',<br />', $datesInRange);
//创建一堆不可排序的随机日期垃圾
$dates=array();
对于($i=0;$i<100;$i++)
$dates[]=日期('Y-m-d',兰特(1000,time());
//首先将其转换为时间戳整数
//如果strotime做不到,你必须转换你的日期格式
//作为另一个准备步骤
foreach(日期为$k=>$v)
$dates[$k]=标准时间($v);
//现在和可选的排序,现在最好的东西
排序(日期);
//最后得到日期的范围
$datesInRange=array();
$dateStart=STROTIME('1998-06-27');
$dateEnd=strotime('2010-4-20');
foreach($日期作为$日期)
如果($date>=$dateStart和$date?这是你的家庭作业吗?是什么生成了数组?看看函数。@gopi1410和Wesley Murch:我开始尝试使用数组搜索和数组过滤器。但不理解数组过滤器的功能。抱歉,使用此函数我无法获得输出。显示语法错误,意外的“函数”"在eclipse中。在浏览器上显示Nothing激活eclipse中的PHP5.3支持,您不应该看到eclipse显示的消息。我还将在答案中添加一个PHP5.2兼容的变体。简单字符串比较+1,因为高效的格式。但是,对于一些示例代码,这个答案会非常强大简单。另外:非常常见的问题:
// create a bunch of unsortable random dates-trash
$dates = array();
for($i = 0; $i < 100; $i ++)
$dates[] = date('Y-m-d', rand(1000, time()));
// first transform it to timestamp integers
// if strtotime don't makes it, you have to transform your datesformat
// as one more pre-step
foreach($dates as $k => $v)
$dates[$k] = strtotime($v);
// now and optional sort that (now finest) stuff
sort($dates);
// at last get the range of dates back
$datesInRange = array();
$dateStart = strtotime('1998-06-27');
$dateEnd = strtotime('2010-4-20');
foreach($dates as $date)
if($date >= $dateStart AND $date <= $dateEnd)
$datesInRange[] = date('Y-m-d', $date);
// have a look at the result
echo implode(',<br />', $datesInRange);