有异常的数组范围


Array range with exceptions

在PHP函数范围中有一个起点,一个终点和一个步骤点。

是否有可能创建一个数组与数字,其中一些值不应该存在?

$hundred_tens = range(120, 190, 10);    

我需要数字220,230,…290年……920930 . .990,但不是200,210…900,910。

我的解决方案:

$hundreds = range(100, 800, 100); 
foreach ($hundred_tens as $value) {
    $add_numbers[] = $value + $hundreds[0];
    $add_numbers[] = $value + $hundreds[1];
    $add_numbers[] = $value + $hundreds[2];
    $add_numbers[] = $value + $hundreds[3];
    $add_numbers[] = $value + $hundreds[4];
    $add_numbers[] = $value + $hundreds[5];     
    $add_numbers[] = $value + $hundreds[6];
    $add_numbers[] = $value + $hundreds[7];
}
$all_hundred_tens = array_merge($hundred_tens, $add_numbers);

我在一个新的数组中添加了一个foreach每个数组值$hundreds,并将这个数组与$hundred_tens合并。

您可以遍历整个范围并排除不必要的数字

$hundred_tens = array();
foreach (range(100, 800, 10) as $number) {
    if ($number % 100 !== 0 && $number % 100 !== 10) {
        $hundred_tens[] = $number;
    }
}

或者你可以合并更小的范围:

$hundred_tens = array_merge(range(120, 190, 10), range(220, 890, 10), range(920, 990, 10));

哪一个更好取决于你有多少个排除项,以及它们是否在列表中一起。

参考我下面关于for (更快的评论,这里有一个例子(只有一行不同)

$hundred_tens = array();
for ($number = 100; $number <= 1000; $number += 10) { 
    if ($number % 100 !== 0 && $number % 100 !== 10) {
        $hundred_tens[] = $number;
    }
}

基本上,您创建了一个从220到910的for循环,每步10次。在循环中,检查数字是100还是100 + 10。如果不是,则将数字添加到数组中。

要检查一个数字是否能被100整除,可以使用模块运算符%

因此,如果a能被100整除,a % 100 == 0的结果为真,否则为假。对于百位加十,您可以这样做:(a - 10) % 100 == 0 .