簡體   English   中英

檢測重疊時期php

[英]Detect overlapping periods php

你能幫我解決重疊的時期嗎? 我有數組

["1-9","11-15","14-20","8-11"]

數組中的每個元素都有其周期。 最小 - 1 個周期,最大 - 數組中的 10 個周期。 我需要檢測它們是否重疊。

我從另一個問題中找到了這個案例

形象

這是一個簡單的片段,它的檢查方式基於比較第一個范圍的最高端與第二個范圍的最低端(如果我們只認為范圍是有效的)。 首先,排序范圍起着重要作用:

$ranges = ["1-9","11-15","14-20","8-11"];
$results = [];
sort($ranges, SORT_NUMERIC);
foreach ($ranges as $first) {
    $firstNums = explode("-", $first);
    foreach ($ranges as $second) {
        if ($first == $second) continue;
        $secondNums = explode("-", $second);
        if ($firstNums[1] >= $secondNums[0] && $first != end($ranges)) {
            $results[$first] = $second;
        }
    }
}
print_r($results);

結果(包含兩個重疊的日期):

Array
(
    [1-9] => 8-11
    [8-11] => 11-15
    [11-15] => 14-20
)

這應該涵蓋所有場景:

<?php

public function findOverlappingPeriods(array $periods): array
{
    $overlappingItems = [];

    foreach ($periods as $keyA => $periodA) {
        foreach ($periods as $keyB => $periodB) {
            if ($keyA === $keyB) {
                continue;
            }

            if ($periodB['start'] > $periodA['start'] && $periodB['start'] < $periodA['end']) {
                $overlappingItems[] = $keyA;
                $overlappingItems[] = $keyB;
            }
        }
    }

    return $overlappingItems;
}

暫無
暫無

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

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