在PHP Foreach循环移动到错误的键

时间:2016-06-06 17:28:39

标签: php

我有以下数组结构

jobs =  {70811 ={....invoices = { A="A",...},...},...}

然后我有两个嵌套循环。外部嵌套循环在这种情况下寻找每个作业#70811。然后内循环寻找为该作业列出的每个发票。

在每个循环中我查询其中一个表

foreach ($this->p['jobs'] as $job => $value) {
    $sql = 'select concat(sum(i.`AMOUNT`))as `amount`, ...
            from `invoice` i
            where  i.`JOBID` = '.$job.'
            group by i.`tracknum` = "'.$this->cTrackKey.'"';

    $cmeJobEdits = 0;
    if ($result = $db->query($sql))
    {
        if ($result->num_rows > 0)
        {
            $this->budget = mysqli_fetch_all( $result, $resulttype = MYSQLI_ASSOC );

            $subTot = 0;
            for ($i=0; $i<count($this->budget);$i++)
            {
                $subTot += $this->budget[$i]['amount'];
            }
            ...
            unset($i);
            $xsql = 'update `cmejob` set `balance` = '.$this->budget[0]['balance'].',... where `jobid` = '.$job;
            if (!$result = $db->query($xsql))
            {
                throw new Exception("Query to update budget failed!");
            }else{
                $cmeJobEdits++;
            }
            unset($xsql);
        }
    }else{
        throw new Exception("Query to get billed amounts for this job failed! "`enter code here`);
    }
    unset($sql);
    unset($value);
}//end loop updating cme jobs

我的问题是外部查询,其中$ job变量不是下一个作业#,而是嵌套数组键“发票”,如下所示。

如代码所示,我尝试在循环中取消设置查询和关键变量但没有成功。

select concat(sum(i.`AMOUNT`))as `amount`, ...
from `invoice` i
where  i.`JOBID` = invoices //this is the value of the variable $job
group by i.`tracknum` = "'.$this->cTrackKey.'"';

2 个答案:

答案 0 :(得分:0)

以下是您请求的值的var_dump($ this-&gt; p ['jobs']。这是您喜欢看的方式

array(1) { [84528]=> array(6) { ["thisBudget"]=> string(4) "0.00" ["thisBilled"]=> string(9) "44,633.80" ["thisSum"]=> string(9) "28,003.00" ["thisBalance"]=> string(10) "-72,636.80" ["invoices"]=> array(1) { ["A"]=> string(1) "A" } ["DORMANT"]=> string(0) "" } }

答案 1 :(得分:0)

问题已经解决。

像往常一样,错误发生在未显示的代码中。上面的代码在$ this-&gt; p ['jobs']数组中添加了一个'发票'元素,当它应该被添加到其他地方时。

现在循环按照描述工作。