Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.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_Math - Fatal编程技术网

PHP检查值是否是具有公共差的数字序列的一部分

PHP检查值是否是具有公共差的数字序列的一部分,php,math,Php,Math,我正在写一个脚本,它需要识别每个第七个数字,其中序列的第一个数字是0(因此序列是6、13、20、27、34、41、48等等) 到目前为止,我得到的是(它的工作方式有限),但我更喜欢编写一个循环,这样序列中的值就不必硬编码: <?php $x = 7; if ($x === 6 || $x === 13 || $x === 20 || $x === 27 || $x === 34 || $x === 41 || $x === 48) { $result = 1; } else

我正在写一个脚本,它需要识别每个第七个数字,其中序列的第一个数字是0(因此序列是6、13、20、27、34、41、48等等)

到目前为止,我得到的是(它的工作方式有限),但我更喜欢编写一个循环,这样序列中的值就不必硬编码:

<?php

$x = 7;

if ($x === 6 || $x === 13 || $x === 20 || $x === 27 || $x === 34 || $x === 41 || $x === 48) {
    $result = 1;
  } else {
    $result = 0;
}

echo $result;

?>

提前感谢您的建议


更新:这是我使用@robbieaverill的解决方案更新的脚本,并根据数组检查值。这里有很多很棒的解决方案,谢谢大家

<?php

$divisor = 7;
$limit = 500; 

$sequence = array();

for ($i = 0; $i <= $limit; $i++) {
  if (is_int(($i + 1) / $divisor)) {
    $sequence[] = $i;
  }
}

$x = 41;

if (in_array($x, $sequence, true)) {
  $result = 1;
} else {
  $result = 0;
}

echo $result;
?>


这里的输出是1,表示如果$x的值是41,那么它可以在$sequence数组中找到。

可能有很多不同的方法可以做到这一点。如果您需要识别可被7整除的数字(加1,因为您是零基的),您可以执行以下操作:

$divisor=7;
$limit=100;//您想什么时候停止搜索?

对于($i=0;$i来说,这样的解决方案也可以

$index = 0;
for($i = 0; $i <= 700; $i++){
    if($index == 6){
        echo $i . "<br/>";
        $index = 0;
    } else {
       $index++; 
    }
}
$index=0;

对于($i=0;$i),下面是使用


通常,我们可以编写如下算术序列:

{a, a+d, a+2d, a+3d, ... }
在哪里 a=6(第一学期) d=7(术语之间的“共同差异”)

所以我们可以 {a,a+d,a+2d,a+3d,…}

{6,6+7,6+2×7,6+3×7,…}

{6,13,20,27,…} 所以我们可以有一个规则

x[n] = a + d(n−1)
它可以用php编写,如下所示

<?php
$a=6;
$n=10; //number of terms
$d=7;
for($i=1;$i<=10;$i++){
    echo $term=$a+($i-1)*$d;
    echo "<br>";
}

?>

将1添加到序列号
$i
,使用模数
n
并返回
$i%7==0

例如

用法示例:

foreach ([0,1,2,3,4,5,6,7,8,9,10,11,12,13] as $number)
{
    if (isNth($number, 7)) print "$number\n";
}

// will print 6\n13\n

foreach ([1,2,3,4,5,6,7,8,9,10,11,12,13,14] as $number)
{
    if (isNth($number, 7, 0)) print "$number\n";
}

// will print 7\n14\n

所以,如果你有一个数字列表,最好是

<?php
   $list = array(0,1,8,89,785,0,789785,56,8,9,1,2,3,2);
   for($i = 0; $i < count($list);$i++){
      if($list[$i] === 0){
          echo "Found and occurence. Value is ".($list[$i+7])."<br>";
       }
    }
?>

将输出 找到并发生。值为56 找到并发生。值为3

请考虑使用生成序列:

$begin = 6;
$end = 48;
$step = 7;
$seq = range($begin, $end, $step);
print_r($seq);
然后,您可以使用以下方法检查该系列中是否有数字:


这一点也不高效,但它显然是一个适用于小系列的实现。所谓小,我指的是数千条或更少的条目。

这被标记为数学,因为它是算术序列
if(x%7=6)//我们有匹配项!
hä?您只在这里搜索
if($list[$I]==0)
-“需要识别每7个数字”是一项任务。根据我自己的经验,序列的第一个数字是0,模数n是
0
是一种更常见的方法,而除法的结果是int
function isNth(int $i, int $nth, int $offset = -1): bool
{
    return !(($i - $offset) % $nth);
}
foreach ([0,1,2,3,4,5,6,7,8,9,10,11,12,13] as $number)
{
    if (isNth($number, 7)) print "$number\n";
}

// will print 6\n13\n

foreach ([1,2,3,4,5,6,7,8,9,10,11,12,13,14] as $number)
{
    if (isNth($number, 7, 0)) print "$number\n";
}

// will print 7\n14\n
<?php
   $list = array(0,1,8,89,785,0,789785,56,8,9,1,2,3,2);
   for($i = 0; $i < count($list);$i++){
      if($list[$i] === 0){
          echo "Found and occurence. Value is ".($list[$i+7])."<br>";
       }
    }
?>
$begin = 6;
$end = 48;
$step = 7;
$seq = range($begin, $end, $step);
print_r($seq);
if (in_array(41, $seq)) // ...