php动态数字数组添加由范围定义的缺失值
我已经搜索了很多次,我发现了一些类似的帖子,但是我找不到我想要的答案,所以我希望你们这些好人能帮助我 我有一个返回简单数字数组的函数。数组编号值是动态的,更改频率最高 e、 g 我想做的是获取数组中的每个数值,将其与设置的范围进行比较,并返回所有低值数值,包括数组中的数值 因此,如果我这样做: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) 但我得
$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);