2016-06-06 6 views
0

Ich habe folgende Arraystrukturin php Foreach Schleife bewegt sich in die falsche Taste

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

Dann werden zwei verschachtelte Schleifen I haben. Die äußere verschachtelte Schleife sucht nach jedem Job # in diesem Fall 70811. Die innere Schleife sucht dann nach jeder Rechnung, die für den Job aufgelistet ist. Ich

in jeder Schleife Abfrage eine der Tabellen

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 

Mein Problem ist, das die äußere Abfrage, wo die $ Jobvariable nicht der nächste Auftrag # ist aber die verschachtelte Array-Schlüssel „Rechnungen“, wie unten dargestellt.

Wie im Code gezeigt, habe ich versucht, die Abfrage und Schlüsselvariablen in den Schleifen ohne Erfolg zu deaktivieren.

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.'"'; 
+0

Warum rufen Sie 'CONCAT()' mit nur einem Argument auf? – Barmar

+0

Ich sehe nicht, wie das passieren könnte, wenn die Daten so sind, wie Sie es zeigen. Bitte posten Sie 'var_dump ($ this-> p ['jobs']);'. – Barmar

+0

Ich habe die concat() nur hinzugefügt, um eine Bezeichnung für die Spalte zu erhalten. Will posten die var_dump – Claus

Antwort

0

Hier ist die var_dump ($ this-> p [ 'Jobs'] der Werte wie gewünscht. Ist dies, wie Sie es am liebsten sehen

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) "" } } 
+0

Wie hier gezeigt, hat das äußere Objekt nur einen Eintrag "Array (1)" Wert 84528. Das innere Objekt hat 6 Elemente, von denen eins "Rechnungen" ist. Das Problem für mich ist, dass die äußere Schleife zweimal herumgeht und "Rechnungen" als zweiter Wert für die äußere Schleifenabfrage einfügt. – Claus

0

Das Problem behoben wurde.

Wie üblich, der Fehler im Code aufgetreten nicht gezeigt. der obigen Code hinzugefügt, um eine an die $ this-> p ‚Rechnungen‘ Element [ ‚Jobs‘] Array, wenn es woanders hinzugefügt werden soll.

jetzt die Die Schleife funktioniert wie beschrieben.