Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获取范围内的数组元素_Php_Arrays - Fatal编程技术网

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