我已经被这个 PHP 问题难住了大约一天了。基本上,我们有一个以 24 小时格式格式化的小时数组,以及一个任意值 ($hour
)(也是 24 小时制)。问题是,我们需要获取 $hour
,并获取数组中的下一个可用值,从紧接着 $hour
的值开始。
数组可能看起来像:
$goodHours = array('8,9,10,11,12,19,20,21).
那么小时值可能是:
$hour = 14;
所以,我们需要一些方法来知道 19 是下一个最佳时间。此外,我们可能还需要获取第二个、第三个或第四个(等等)可用值。
问题似乎是因为 14 不是数组中的值,所以没有索引可以让我们递增到下一个值。
为了让事情更简单,我使用了 $goodHours
并多次重复这些值,这样我就不必处理返回到开始的问题(这可能不是最好的方法它,但快速修复)。
我觉得这是我所缺少的简单东西,但如果有人能阐明一些问题,我将不胜感激。
埃里克
最佳答案
您可以使用 for 循环遍历数组,直到找到第一个大于您正在搜索的数组为止:
$goodHours = array(8,9,10,11,12,19,20,21);
$hour = 14;
$length = count($goodHours);
for ($i = 0 ; $i < $length ; $i++) {
if ($goodHours[$i] >= $hour) {
echo "$i => {$goodHours[$i]}";
break;
}
}
会给你:
5 => 19
并且,要获得您正在搜索的项目,以及之后的一些项目,您可以使用类似这样的东西:
$goodHours = array(8,9,10,11,12,19,20,21);
$hour = 14;
$numToFind = 2;
$firstIndex = -1;
$length = count($goodHours);
for ($i = 0 ; $i < $length ; $i++) {
if ($goodHours[$i] >= $hour) {
$firstIndex = $i;
break;
}
}
if ($firstIndex >= 0) {
$nbDisplayed = 0;
for ($i=$firstIndex ; $i<$length && $nbDisplayed<$numToFind ; $i++, $nbDisplayed++) {
echo "$i => {$goodHours[$i]}<br />";
}
}
这会给你以下输出:
5 => 19
6 => 20
基本上,这里的想法是:
- 在数组中前进,直到找到第一个
>=
的项到您要查找的内容- 找到第一个循环后退出
- 如果找到匹配项
- 遍历数组,直到它的末尾,
- 或者您找到的元素与您要找的一样多。
关于PHP:数组中的下一个可用值,从非索引值开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2525650/