Re: Odd behavior

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2006/12/25, jekillen <jekillen@xxxxxxxxxxx>:


On Dec 25, 2006, at 7:21 AM, Roman Neuhauser wrote:

> # jekillen@xxxxxxxxxxx / 2006-12-24 18:11:03 -0800:
>> function display($list, $in, $out, $save, $req, $x)
>>  {
>>       for($i = 0; $i < count($in); $i++)
>>       {$j = $i + 1;
>>       // two sets of links displayed instead of one
>>          for($i = 0; $i < count($out); $i++)
>>           {$j = $i + 1;
>>             // two sets of links displayed instead of one
>>           for($i = 0; $i < count($save); $i++)
>>            {$j = $i + 1;
>>              // two sets of links displayed instead of one
>>           for($i = 0; $i < count($req); $i++)
>>            {$j = $i + 1;
>>              // two sets of links displayed instead of one
>
>> The print lines above are supposed to produce a list of links to
>> files.
>> In the web display I get duplicate sets of links which seems to mean
>> that the loops in the function are running twice, and in one instance
>> three times instead of once.
>
> Look at the variable names you use for iteration.
>
Thanks, Usually, when a variable name like $i is used and then
reset to 0 in the next loop it does not matter. But I solved the
problem and posted the solution.  I also solved the regex
problem. There was an extra \n sneaking into the test pattern
so I could not get a match. I am not sure where the extra \n is
coming from.
It looks like I didn't post the solution after all:
Update:
I solved the double loops problem with this code change:

function display($list, $a, $x)
                 {
                  for($i = 0; $i < count($a); $i++)
                     {$j = $i + 1;
                      print "<a
href=\"steps.php?list=$list&next=$j&x=$x\">$j</a><br><br>\n";
                     };
                  }
and:

if($list || $current)
   {
     switch($list)
           {
            case 'in':
            display($list, $in, $x);
            break;
            case 'out':
            display($list, $out, $x);
            break;
            case 'save':
            display($list, $save, $x);
            break;
            case 'req':
            display($list, $req, $x);
            break;
           }
   }
Apparently what was happening was that the code running under 5.1.2
was trying to process all the arrays that had values in spite of the
switch
statement in the original display() function. If the was an $in array
the
switch  would process that for the $list value being 'in' but since
there
was also a save value, the switch tried to process it also, even though
'save' wasn't the $list value. I found it would do this for all arrays
that
had values. So if three had values the loop selected loop would run
three times.
Could this be a bonafide bug?
JK


I suspect this is an EBSAC bug, but I'm not completely sure. Anyway, please
consider improving your coding style, its all messy and unreadable. Also,
you should provide a description of the calling conditions, since there
might be the cause of the error in the function.

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux