PHP:数组中的下一个可用值,从非索引值开始

标签 php arrays

我已经被这个 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/

相关文章:

php - 使用正则表达式从地址中提取数字

PHP 和 MySQL - 显示数据库中最后十个条目的最有效方法?

php - 带有额外参数/自定义重定向的 Javascript 表单提交

c++ - 使用 C++ 可变参数模板通过类构造函数传递数组

javascript - javascript中的数组过滤数据

javascript - jQuery - 检查数组是否为空或具有属性

php - 帮助使用 DRY 原则在服务类中创建灵活的基础 'find' 方法

php - 在应用程序中实现(安全)Api key

javascript - Mongoose 无法更新数组 : undefined error

c - 如何在 C 中检查动态分配的字符串数组中的每个字符?