这个脚本应该获取一个多维数组并遍历这些值。
数组大小为10,每个元素应包含一个关联数组:
$games[0] => array('foo' => 'bar')
$games[1] => array('foo1' => 'bar1')
etc..
在此示例中,while循环应迭代5次。对于while循环的每次迭代,for循环应迭代10次。
所以我期待回声是:
countwhile = 5 countfor = 50 totalgames = 50
但实际上我正在
countwhile = 5 countfor = 150 totalgames = 150
我认为$ games数组不是问题,因为我之前已经进行了下面的调用,并且使用了print_r来查看内容,这是预期的。
整个代码不在我的index.php页面上的函数或类中,问题可能与变量范围有关吗?
$totalruns = 5;
$endindx = 10;
$startindx = 0;
$countwhile = 0;
$countfor = 0;
$totalfilesize = 0;
$totalgames = 0;
$sizeof = 0;
while($totalruns > 0)
{
$games = $feedHandler->getGames($startindx, $endindx);
$sizeof = sizeof($games);
for($i=0; $i<$sizeof; $i++)
{
$totalfilesize += $games[$i]['swf_file_size'];
$countfor++;
}
$startindx += 10;
$endindx += 10;
$totalruns -= 1;
$totalgames += $sizeof;
unset($games);
}
echo'<p>' . ' countwhile = ' . $countwhile . ' countfor = ' . $countfor . '</p>';
答案 0 :(得分:3)
问题1:
$sizeof = sizeof($games)-1;
解释1:
for($i=0, $sizeof = sizeof($games);$i<=$sizeof;$i++)
以上将执行11次是sizeof($games)
是10
所以,要么
for($i=1, $sizeof = sizeof($games);$i<=$sizeof;$i++)
or
for($i=0, $sizeof=sizeof($games)-1;$i<=$sizeof;$i++)
问题2:
$e = sizeof($games);
解释2:
$e = count($games);
...
$e += $e;
如果$games
的最终尺寸为50,则只需将其加总为100
所以,它是某种逻辑问题
答案 1 :(得分:1)
我知道答案已被接受,但我认为我会重构并使其更加干净。
function retrieveGamesInfo($limit, $start = 0)
{
$feedHandler = new FeedHandler(); // ignore this, just for testing to simluate your call
if ($start > $limit)
throw new Exception("Start index must be within the limit");
$result = Array(
'TotalGames' => 0,
'TotalFileSize' => 0
);
// iterate over the results in groups of 10
$range = $start;
while ($range < $limit)
{
$range_end = $range + 10; // change me to play with the grab amount
if ($range_end > $limit)
$range_end = $limit;
// grab the next 10 entries
$games = $feedHandler->getGames($range,$range_end);
$result['TotalGames'] += count($games);
foreach ($games as $game)
$result['TotalFileSize'] += $game['swf_file_size'];
$range = $range_end;
}
return $result;
}
var_dump(retrieveGamesInfo(50));
基于我阅读和接受的所有内容,这应该是一个很好的补充。以上结果如下:
array(2) {
["TotalGames"]=>
int(50)
["TotalFileSize"]=>
int(275520)
}
答案 2 :(得分:0)
正如我在评论中所说的那样,$ e在每个循环中被覆盖,所以你在$ e中的结果只是$ games * 2中元素的最后一个数。 添加了ajreal问题这意味着结果是你的代码应该呈现的结果:-)而且我很确定你的最后一场$游戏不只是10个元素而是50.安静的确定......但是很难阅读。