Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php动态数字数组添加由范围定义的缺失值_Php_Arrays_Range - Fatal编程技术网

php动态数字数组添加由范围定义的缺失值

php动态数字数组添加由范围定义的缺失值,php,arrays,range,Php,Arrays,Range,我已经搜索了很多次,我发现了一些类似的帖子,但是我找不到我想要的答案,所以我希望你们这些好人能帮助我 我有一个返回简单数字数组的函数。数组编号值是动态的,更改频率最高 e、 g 我想做的是获取数组中的每个数值,将其与设置的范围进行比较,并返回所有低值数值,包括数组中的数值 因此,如果我这样做: $array = range( (11,15), (16,21), (22,26) ); 所需的输出将是: array(11,12,16,17,18,19,22,23) 但我得

我已经搜索了很多次,我发现了一些类似的帖子,但是我找不到我想要的答案,所以我希望你们这些好人能帮助我

我有一个返回简单数字数组的函数。数组编号值是动态的,更改频率最高

e、 g

我想做的是获取数组中的每个数值,将其与设置的范围进行比较,并返回所有低值数值,包括数组中的数值

因此,如果我这样做:

$array = range(
    (11,15),
    (16,21),
    (22,26)
);
所需的输出将是:

array(11,12,16,17,18,19,22,23)
但我得到的是所有范围内的所有数字

array(11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26)

解决这个问题的简单方法是什么?

迭代每个元素,找到需要包含的起始值和结束值,并将它们附加到输出数组中:

$a = array(12,19,23);
$b = array(
    range(11,15),
    range(16,21),
    range(22,26)
);

$c = array();
foreach ($a as $k => $cap) {
    $start = $b[$k][0];
    $finish = min($b[$k][count($b[$k])-1], $cap);
    for ($i = $start; $i <= $finish; $i++) {
        $c[] = $i;
    }
}
print_r($c);

我的解决方案可能不是最有效的,但这里有:

$numbers = array(12,19,23);

$ranges = array(
    array(11,15),
    array(16,21),
    array(22,26)
);

$output = array();

// Loop through each of the numbers and ranges:

foreach($numbers as $num) {
    foreach($ranges as $r) {
        if ($num >= $r[0] && $num <= $r[1]) {
            // This is the correct range
            // Array merge to append elements
            $output = array_merge($output, range($r[0], $num));
            break;
        }
    }
}

// Sort the numbers if you wish
sort($output, \SORT_NUMERIC);

print_r($output);
试试这个代码


您缺少参数中的第一个数组?我只是想补充一点,我使用的数组没有仅键的值,所以看起来是这样的:array121923所以当返回时应该是:array112161718192223,因为它随后传递给另一个函数,该函数将结果与数据库进行比较。比我快5秒,虽然我很好奇你的跑得快不快。两者似乎都是开的,但我的循环中有更多的函数调用。@rink.attendant.6,它不在^2上,它应该在*r上,其中r是输入指定的最大范围。如果其中一个范围是1000000,那么这几乎肯定会支配所有人,你们会很快回答的,非常感谢。似乎我被宠坏了选择,但我会尽快尝试所有答案。只是一个简短的提示,这个答案在函数内部也有效,但我不能选择两个答案,否则我会:您好,谢谢您的所有答案,他们都很好,但我必须选择一个,选择这个的原因是代码必须进入函数内部,并且这个答案似乎奏效了。干杯。我没想到要花一整天的时间来测试我的答案,但很高兴知道它也有效-P
Array
(
    [0] => 11
    [1] => 12
    [2] => 16
    [3] => 17
    [4] => 18
    [5] => 19
    [6] => 22
    [7] => 23
)
$numbers = array(12,19,23);

$ranges = array(
    array(11,15),
    array(16,21),
    array(22,26)
);

$output = array();

// Loop through each of the numbers and ranges:

foreach($numbers as $num) {
    foreach($ranges as $r) {
        if ($num >= $r[0] && $num <= $r[1]) {
            // This is the correct range
            // Array merge to append elements
            $output = array_merge($output, range($r[0], $num));
            break;
        }
    }
}

// Sort the numbers if you wish
sort($output, \SORT_NUMERIC);

print_r($output);
Array
(
    [0] => 11
    [1] => 12
    [2] => 16
    [3] => 17
    [4] => 18
    [5] => 19
    [6] => 22
    [7] => 23
)
$range = array(
            array(11,15),
            array(16,21),
            array(22,26),
);

$array = array(12,19,23);
$result = array();
foreach($range as $key=>$value)
{
    //$range1 =$range[$key];
    $min = $range[$key][0];
    $max = $range[$key][1];
    for($i = $min;$i<=$max;$i++)
    {
        if($i <= $array[$key])
        {
            array_push($result,$i);
        }
    }

}
echo "<pre>";print_r($result);