foreach 循环重复数组中的最后一项

Posted

技术标签:

【中文标题】foreach 循环重复数组中的最后一项【英文标题】:foreach Loop is repeating last item in array 【发布时间】:2013-01-30 19:17:56 【问题描述】:

我正在尝试编写一个 foreach 循环,它将通过邮件为每个数组元素发送单独的报告,但它只输出最后一个元素。我已经尝试过很多方式来写这篇文章,以至于我想我开始重复自己了。请帮忙。

$items = array(1 => 1, 2 => 2, 3 => 3, 7 => 4, 8 => 5,9 => 6, 17 => 8, 18 => 338, 19 => 50, 23 => 52, 11 => 7, 16 => 44,  4 => 11, 5 => 22, 6 => 33);

foreach ($items as $id => $number) 
//I am querying a pervasive database here
$wtdVar = $dbx->getOne('SELECT SUM(sales) FROM table WHERE date1 >= '.$wkstart3.' AND date2 <= '.$today3.' AND category <> \'ABC\' AND number = '.$number);

if (DB::isError($wtdVar)) 
    echo '<div class="error">Error: - '.$wtdVar->getDebugInfo().'</div>';


//get the goal for the week so far, use date variables with 2 at the end for postgres queries
$wtdgoal = $db->getOne("SELECT SUM(goal) FROM table2 WHERE id = $id AND gdate BETWEEN '$wkstart2' AND '$today2'");
if (DB::isError($wtdgoal)) 
    echo '<div class="error">Error: - '.$wtdgoal->getDebugInfo().'</div>';

数组中有 15 项,报表的电子邮件工作正常,但报表中的数据是最后一项 15x。有更多的数据,并且有一个静态变量,我有数组元素,它可以完美地工作,但我需要它循环,因为我必须在很多地方使用这些数据。

【问题讨论】:

您在 foreach 循环的每次迭代中都覆盖了变量 $wtdVar$wtdgoal,因此如果您希望在 $wtdVar$wtdgoal 中获取数据,您只会得到最后一个结果,对应上一次迭代。 @tmuguet 你能否说得更具体一点,并举例说明它应该如何编写?这是我真正挣扎的 php 领域之一。 我不能更具体,除非您将代码放在使用这些变量的位置(我猜是在 foreach 循环之后)。 【参考方案1】:

您需要设置数组以包含所有检索到的值。

$wtdVars = array();
$wtdgoals = array();

foreach ($items as $id => $number) 
    //I am querying a pervasive database here
    $wtdVar = $dbx->getOne('SELECT SUM(sales) FROM table WHERE date1 >= '.$wkstart3.' AND date2 <= '.$today3.' AND category <> \'ABC\' AND number = '.$number);

    $wtdVars[] = $wtdVar;

    if (DB::isError($wtdVar)) 
        echo '<div class="error">Error: - '.$wtdVar->getDebugInfo().'</div>';
    

    //get the goal for the week so far, use date variables with 2 at the end for postgres queries
    $wtdgoal = $db->getOne("SELECT SUM(goal) FROM table2 WHERE id = $id AND gdate BETWEEN '$wkstart2' AND '$today2'");

    $wtdgoals[] = $wtdgoal;

    if (DB::isError($wtdgoal)) 
        echo '<div class="error">Error: - '.$wtdgoal->getDebugInfo().'</div>';
    

然后大概在您的报告中,您有一个循环,一直使用$wtdVar$wtdgoal - 而这应该使用$wtdVars[$i]$wtdgoals[$i] 其中$i 是一个从零开始的变量,随着每次迭代递增报告中的循环。

【讨论】:

以上是关于foreach 循环重复数组中的最后一项的主要内容,如果未能解决你的问题,请参考以下文章

php foreach循环中的变量

详细讲解foreach循环的用法

foreach使用方法

为啥我的委托只使用我的 foreach 循环中的最后一项?

在 foreach 循环中使用 file_put_contents 只会下载最后一项

php中foreach循环遍历二维数组