如何在php中查找数字范围内的可用批次

时间:2015-03-13 10:02:24

标签: php recursion

有一个问题,我花了一些时间来找出解决方案。

有一个主号码批次。例如100 - 150(大小 - 51)。 而且主批次中的子批次也很少。例如105-110和120-130。

我想在主批次中获得其他批次及其批量大小。 例如  100-104,111-119和131-150

我试图为此找到解决方案但尚未找到任何解决方案。是否有人可以指导我在PHP中执行此操作或给出伪代码,这对我非常有帮助。

由于

1 个答案:

答案 0 :(得分:1)

使用array_diff,您可以在批次数组中找到空闲空间。

然后从这个列表中提取不间断键的部分,从而产生每个空闲范围。

$mainBatch = range(100, 150);

$subBatch = range(110, 120);
$subBatch2 = range(130,145);

$subBatchesFree = array_diff($mainBatch, $subBatch, $subBatch2);

$remainingBatches = array();
$i = 0;
foreach ($subBatchesFree as $key => $available) {
    if (isset($subBatchesFree[$key + 1])) {
        // Next key is still in the range
        ++$i;
    } else { 
        // Next key is in a new range. 
        // I create the current one and init for the next range
        $remainingBatches[] = range($subBatchesFree[$key - $i], $available);
        $i = 0;
    }
}

print_r($remainingBatches);

输出:

Array
(
    [0] => Array
        (
            [0] => 100
            [1] => 101
            [2] => 102
            [3] => 103
            [4] => 104
            [5] => 105
            [6] => 106
            [7] => 107
            [8] => 108
            [9] => 109
        )

    [1] => Array
        (
            [0] => 121
            [1] => 122
            [2] => 123
            [3] => 124
            [4] => 125
            [5] => 126
            [6] => 127
            [7] => 128
            [8] => 129
        )

    [2] => Array
        (
            [0] => 146
            [1] => 147
            [2] => 148
            [3] => 149
            [4] => 150
        )

)