Php 如何在数组中查找最大和最小日期?

Php 如何在数组中查找最大和最小日期?,php,arrays,algorithm,Php,Arrays,Algorithm,我需要使用PHP从给定数组中查找最大和最小日期 我有$date\u arr,其中包含以下值 $date_arr = array('0'=>'20-05-2015','1'=>'02-01-2015','2'=>'30-03-2015'); 在这里,我需要将较大的日期设置为“2015年5月20日”,将最小日期设置为“2015年1月2日” 我如何才能做到这一点?请尝试一下 $date_arr = array('0' => '20-05-2015', '1' =>

我需要使用PHP从给定数组中查找最大和最小日期

我有$date\u arr,其中包含以下值

  $date_arr = array('0'=>'20-05-2015','1'=>'02-01-2015','2'=>'30-03-2015');
在这里,我需要将较大的日期设置为“2015年5月20日”,将最小日期设置为“2015年1月2日”

我如何才能做到这一点?

请尝试一下

$date_arr = array('0' => '20-05-2015', '1' => '02-01-2015', '2' => '30-03-2015');
for ($i = 0; $i < count($date_arr); $i++)
{
    if ($i == 0)
    {
        $max_date = date('Y-m-d H:i:s', strtotime($date_arr[$i]));
        $min_date = date('Y-m-d H:i:s', strtotime($date_arr[$i]));
    }
    else if ($i != 0)
    {
        $new_date = date('Y-m-d H:i:s', strtotime($date_arr[$i]));
        if ($new_date > $max_date)
        {
            $max_date = $new_date;
        }
        else if ($new_date < $min_date)
        {
            $min_date = $new_date;
        }
    }
}
echo date('d-m-Y',strtotime($max_date));
echo date('d-m-Y',strtotime($min_date));
$date\u arr=array('0'=>'20-05-2015','1'=>'02-01-2015','2'=>'30-03-2015');
对于($i=0;$i$max\u date)
{
$max_date=$new_date;
}
否则如果($new_date<$min_date)
{
$min_date=$new_date;
}
}
}
回显日期('d-m-Y',标准时间($max_日期));
回显日期('d-m-Y',标准时间('min_date));

max()
min()
适用于您的阵列:

echo "Latest Date: ". max($dates)."\n";
echo "Earliest Date: ". min($dates)."\n";
$date_arr=array(0=>'2015-05-20',1=>'2015-02-21',2=>'2015-04-13',3=>'2020-04-30',4=>'2020-04-13');
$max_date=$date_arr[0];

对于($i=0;$i最终您找到了好的答案吗?为什么您要对日期进行排序,将复杂性增加到至少nlog(n)?您只需迭代所有日期我不知道为什么,但它不起作用…$date\u arr[0]返回最大值,$date\u arr[count($date\u arr)-1]返回中一:(min-one呢?@Eternal是的,很好,但事实上,这种方法保持给定的日期格式。否则,它会更快。最好的方法!Thx!甚至适用于“2018-12-06T10:00:00.000”格式。这个答案是错误的,不会适用于OP的
dd-mm-yyyy
格式字符串。这个答案不正确。在ot中她的案例中,日期格式从年份开始,逐渐变为较小的单位,这可以很好地工作。请注意,无论是
null
还是任何其他空字符,这都是最小的。我喜欢它,因为它更深入,不真正依赖于PHP函数!我需要在VB中使用它,当然我可以通过一些简单的转换来使用它函数。解决方案优雅、简单、清晰,而且——正如我所说的——通用!Thnx这个答案并不优雅;它是冗长的。它还不必要地向日期字符串中添加时间成分。它在每次迭代中都执行重新计数。
strotime()
如果没有所有额外的
date()
在循环中调用。虽然此代码可能会解决问题,但如何以及为什么解决此问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,您是在将来为读者回答问题,而不仅仅是现在提问的人。请您的答案添加解释和说明请说明适用的限制和假设。这是对不同问题的正确回答。由于OP的问题以
dd-mm-yyyy
的格式显示输入日期,因此您的解决方案不适用于此页面。最好将计数缓存,而不是每次迭代计数。此外,这是一个code唯一的答案,这意味着它是堆栈溢出的低值。
echo "Latest Date: ". max($dates)."\n";
echo "Earliest Date: ". min($dates)."\n";
$date_arr=array(0=>'2015-05-20',1=>'2015-02-21',2=>'2015-04-13',3=>'2020-04-30',4=>'2020-04-13');

$max_date=$date_arr[0];
for($i=0;$i<count($date_arr);$i++)
{
    echo $date_arr[$i]. ' ,';
    if( $max_date < $date_arr[$i+1])
    {
        $max_date=$date_arr[$i+1];
    }
}  
echo " Max= ". $max_date;