函数调用设置变量不起作用

时间:2016-02-14 15:54:27

标签: php

以下代码在建议确实得到$ 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? 再次感谢任何人的帮助

3 个答案:

答案 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 />';    
   }

演示:https://eval.in/518511

答案 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