簡體   English   中英

查找數組中的下一個最大值

[英]Find next highest value in an array

我將字符串轉換為具有 1 到 7 個值的數組,例如 3、1234567、1234、357、46 等

給定 1 到 7 之間的任意數字,我如何找到數組中的下一個值?

$str=12345;
$arr=str_split($str);

$end=end($arr);

if ($day==$end) {
    $next=reset($arr);
} else {
    $loc=array_search($day, $arr)+1;
    $next=$arr[$loc];
}

print $next;

如果 day 為 1,則上述返回 2,如果 day 為 5,則返回 1,這兩者都是正確的,但如果 day 是 6 或 7,則它不會返回應該為 1 的正確值 - 同樣,如果數組是 1245 並且 day 是3 它再次沒有返回應該是 4 的正確值。

我需要做什么才能使上述在所有情況下都返回正確的值?

$values = array_filter($arr, function($v) use($day) {
    return $v > $day;
});

$value = $values ? array_shift($values) : array_shift($arr);

可能不是最佳且未經測試,但它應該可以工作。

當然,將有許多不同的方式來執行此任務。 我將演示一種在循環中使用遞減來查找序列中的下一個數字而不生成數組的有效方法。 在循環之前,聲明 haystack 字符串中第一個數字的后備值。

這里有 5 個不同的測試用例,其中尋找 5 之后的數字。

代碼:(演示

$tests = [
    '3',
    '1234567',
    '1234',
    '357',
    '46'
];

$find = 5;
++$find;
foreach ($tests as $test) {
    $found = $test[0];
    for ($i = strlen($test) - 1; $i >= 0; --$i) {
        if ($test[$i] < $find) {
            break;
        }
        $found = $test[$i];
    }
    echo "Found $found\n";
}

Output:

Found 3
Found 6
Found 1
Found 7
Found 6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM