PHP检查值是否是具有公共差的数字序列的一部分
我正在写一个脚本,它需要识别每个第七个数字,其中序列的第一个数字是0(因此序列是6、13、20、27、34、41、48等等) 到目前为止,我得到的是(它的工作方式有限),但我更喜欢编写一个循环,这样序列中的值就不必硬编码: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
<?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)) // ...