我刚开始学习PHP。我在任务中遇到的最后3天。谷歌拒绝提供帮助。问题出现了。
有一项任务 - 在数组$ date中查找随机生成日期中的最低日期。这就是我所做的:
// Create two variables of type timestamp with the minimum and maximum value dates
$Min = strtotime('1970-01-01 00:00:00');
$Max = strtotime('3000-01-01 00:00:00');
// Create an array of 5 random dates, using a random number generator
for ($i = 0; $i<5; $i++) {$date[$i] = rand($min, $max);}
// Check, like all good
var_dump($date);
// Now I want to select the day of the accident the smallest output of dates. Or, for example, the largest month. I enter the command
$Y = min(date('d', $date[$i]));
var_dump($y);
但是浏览器会发誓,产生错误:
(!)注意:未定义的偏移量:
中的5(!)警告:min():当只给出一个参数时,它必须是a
中的数组
//我试图使用标记 - @,但它不能解决问题,只能隐藏错误。
据我所知,错误意味着错误的索引,而且$ Y - 不是数组。尝试用数组表示$ Y,但仍然是5个错误
//我试图用这样的方式写这行:
$Y = min(date('d', $date[0]), date('d', $date[1]), date('d', $date[2]), date('d', $date[3]), date('d', $date[4]));
!!! BINGO !!!一切正常! 但是如果我在数组$ date中有25,000个元素怎么办?我要写这行多长时间?
亲爱的程序员,请帮忙。如何合理,简洁,清晰地写出最后一行,以便在没有错误条件的情况下执行任务?怎么了?谢谢!
答案 0 :(得分:0)
强大的解决方案是使用for循环来比较每个元素,可能是foreach循环。
$min = date('d', $date[0]);
foreach($date as $d){
$min = min(date('d', $d), $min);
}
for循环会做同样的技巧,但你必须引用索引号。但除非你还想知道它是什么元素,否则可以省去麻烦。
答案 1 :(得分:0)
我知道这看起来很奇怪,但你实际上可以使用php(7)提供的东西:
// 10 random ints
$randoms = array_map(function(){
return rand();
},range(0,10));
// 10 random dates
$dates = array_map(function($rand_int){
// there is probably a easier way to do that
return (new DateTimeImmutable())->setTimeStamp($rand_int);
},$randoms);
// apply min and extract Day or whatever you like.
var_dump( min($dates)->format('Y-m-d - l') );
// result:
// string(21) "1974-11-23 - Saturday"
以下小记录很重要:
http://php.net/manual/en/datetime.diff.php
从PHP 5.2.2开始,可以使用比较运算符比较DateTime对象。
哪个min
应该在幕后做。
答案 2 :(得分:0)
你几乎让它运转起来,只是一些小错误。
在php中,通常将变量名称写为小写,对于函数名称也是如此。
// define all variables needed
$dates = array();
$min = strtotime('1970-01-01 00:00:00');
$max = strtotime('3000-01-01 00:00:00');
for ($i = 0; $i<5; $i++) {
$dates[$i] = rand($min, $max);
}
// lookup the lowest date int and convert it to a date string
$accident = date('d', min($dates));
答案 3 :(得分:0)
您可以使用natsort
按照从最低到最高的顺序对时间戳进行排序,然后从已排序的数组中选择第一个元素。
natsort($dates);
$lowest = $dates[0];
这样,您的时间戳应该是第一个可能的最低值。
以下是natsort上的手册页,了解有关该功能的更多信息
答案 4 :(得分:0)
我的朋友。
在使用函数之前,您应该阅读有关它们的文档。
所以你不能像那样使用strtotime:
strtotime('3000-01-01 00:00:00');
它会返回“false”而不是整数。小心这个。 http://php.net/manual/en/function.strtotime.php
还有一个: http://php.net/manual/en/function.min.php
另外你应该知道在php中变量名是区分大小写的。所以在你的例子中
$Min = strtotime('1970-01-01 00:00:00');
$Max = strtotime('3000-01-01 00:00:00');
// Create an array of 5 random dates, using a random number generator
for ($i = 0; $i<5; $i++) {$date[$i] = rand($min, $max);}
变量$ min和$ Min是差异。
所以变量$ min未定义。
现在你可以看看我的简单解决方案:
<?php
// Create two variables of type timestamp with the minimum and maximum value dates
$Min = strtotime('1970-01-01 00:00:00');
var_dump('Min = '. $Min);
$Max = strtotime('2030-01-01 00:00:00');
var_dump('Max = '. $Max);
// Create an array of 5 random dates, using a random number generator
for ($i = 0; $i<5; $i++) {$date[$i] = rand($Min, $Max);}
// Check, like all good
var_dump($date);
// Now I want to select the day of the accident the smallest output of dates. Or, for example, the largest month. I enter the command
$array = [];
foreach($date as $value)
{
$array[date('Y-m-d', $value)] = date('d', $value);
}
var_dump($array);
$Y = min($array);
var_dump($Y);