以下代码在建议确实得到$ i $ j正常工作后被修改
<?php
$i=1;
$j=1;
function fixIndex() {
global $i, $j;
$a=$j-$i;
if ($a === 60){
$i += 60;
}
$j++;
}
但它对我的主要代码不起作用如下:
$times = array();
$values1 = array();
$values2 = array();
$values3 = array();
$values4 = array();
$i=1;
$j=1;
$file_lines = file($DispFile, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
foreach( $file_lines as $line_num => $line_value) {
fixIndex();
if ($line_num < $i)continue; // skip records in 60* range
$line_elements = explode(",", $line_value);
$times[] = date("H:i:s", $line_elements[0]);
$values1[] = $line_elements[1];
$values2[] = $line_elements[2];
$values3[] = $line_elements[3];
$values4[] = $line_elements[4];
}
在foreach循环之后我调用了fixIndex(),尝试获取下一行代码的$ i值(if($ line_num&lt; $ i)continue;)在构建数组之前跳过60条记录。那个$我似乎没有跳过记录。如果我将$ i更改为其上的数字($ line_num&lt; 60)继续;比它跳过60条记录。 如果这个php程序在网上每10秒做一次刷新,那么程序流程是否也有任何变化,我的意思是每次刷新后$ i和$ j都休息为1? 再次感谢任何人的帮助
答案 0 :(得分:0)
您可以使用传递引用来避免在此处需要全局变量。这意味着该函数将修改传递给它的变量。
https://secure.php.net/manual/en/language.references.pass.php
<?php
function fixIndex(&$i, &$j) {
global $i, $j;
if ($j - $i == 5) {
$i += 5;
}
$j++;
}
$i=1;
$j=1;
for ($k=0;$k<=20; $k++){
fixIndex($i, $j);
echo $i.'<br />';
echo $j.'<br />';
}
?>
此外,我将“$ i + 5”(不会发生任何事情)更改为“$ i + = 5”,以便修改变量$ i。
答案 1 :(得分:0)
您没有存储增量值$i
。
<?php
$i=1;
$j=1;
function fixIndex() {
global $i, $j;
if ($j - $i == 5){
$i = $i+5;
}
$j++;
}
for ($k=0;$k<=20; $k++){
fixIndex();
echo $i.'<br />';
echo $j.'<br />';
}
答案 2 :(得分:0)
您可能会像这样描述您想要做的事情:
“ 每当$ j增长5 时,将$ i增加5。”这可以用这样的直接和非常紧凑的形式实现。
(解决方案涵盖所有情况,并且不依赖于迭代的上限。)
<?php
function fixIndex(&$i,$j) {
if ( ($j>1) && (($j-1) % 5 == 0) ) $i += 5;
}
$i = 1;
for ($j=1;$j<=20; $j++){
fixIndex($i,$j);
echo "\$j=$j, \$i=$i <br />";
}
注意:
(($ j-1)%5 == 0)
...表示:当$ j -1可以除以5时没有余数(%5 =“modulo 5”)。
function fixIndex(&amp; $ i,$ j)
&amp; $ i表示接受$ i变量内存的引用(指针)而不是其值。这是必要的,因为该函数正在修改$ i的值。因此,您不需要全局语句。
另一方面,$ j变量未被修改,因此可以作为值接受。
结果:
$ j = 1,$ i = 1
$ j = 2,$ i = 1
$ j = 3,$ i = 1
$ j = 4,$ i = 1
$ j = 5,$ i = 1
$ j = 6,$ i = 6
$ j = 7,$ i = 6
$ j = 8,$ i = 6
$ j = 9,$ i = 6
$ j = 10,$ i = 6
$ j = 11,$ i = 11
$ j = 12,$ i = 11
$ j = 13,$ i = 11
$ j = 14,$ i = 11
$ j = 15,$ i = 11
$ j = 16,$ i = 16
$ j = 17,$ i = 16
$ j = 18,$ i = 16
$ j = 19,$ i = 16
$ j = 20,$ i = 16