2016-04-26 11 views
1

Ich habe folgende Array von Objekten:Hinweis: Undefined offset während throw Looping ein Array von Objekten mit foreach

Array 
(
    [0] => Array 
     (
      [0] => stdClass Object 
       (
        [Sales] => 4 
       ) 

      [1] => stdClass Object 
       (
        [Sales] => 6 
       ) 

      [2] => stdClass Object 
       (
        [Sales] => 5 
       ) 

     ) 

    [1] => Array 
     (
      [0] => stdClass Object 
       (
        [Sales] => 8 
       ) 

      [1] => stdClass Object 
       (
        [Sales] => 7 
       ) 

      [2] => stdClass Object 
       (
        [Sales] => 7 
       ) 

     ) 

    [2] => Array 
     (
      [0] => stdClass Object 
       (
        [Sales] => 5 
       ) 

      [1] => stdClass Object 
       (
        [Sales] => 7 
       ) 

      [2] => stdClass Object 
       (
        [Sales] => 6 
       ) 

     ) 

    [3] => Array 
     (
      [0] => stdClass Object 
       (
        [Sales] => 5 
       ) 

      [1] => stdClass Object 
       (
        [Sales] => 6 
       ) 

      [2] => stdClass Object 
       (
        [Sales] => 6 
       ) 

     ) 

    [4] => Array 
     (
      [0] => stdClass Object 
       (
        [Sales] => 4 
       ) 

      [1] => stdClass Object 
       (
        [Sales] => 5 
       ) 

      [2] => stdClass Object 
       (
        [Sales] => 11 
       ) 

     ) 

) 

Ich möchte den Gesamtumsatz in jedem der Objekte erhalten. Also schrieb ich diesen Code:

public function getChannelsSales ($ChannelSales) { 
     $totalChannelSales = array(); 
     $i = 0; 
     foreach ($ChannelSales as $ChSales) { 
      foreach ($ChSales as $value) { 
       $totalChannelSales[$i] = $totalChannelSales [$i] + $value->Sales; 
      } 
      ++$i; 
     } 
     return $totalChannelSales; 
} 

Nach dem Ausführen des Codes ich die richtige Antwort:

Array 
(
    [0] => 15 
    [1] => 22 
    [2] => 18 
    [3] => 17 
    [4] => 20 
) 

aber ich auch in der Froint die folgenden Meldungen enden:

Notice: Undefined offset: 0 in ...\Sales.php on line 174 
Notice: Undefined offset: 1 in ...\Sales.php on line 174 
Notice: Undefined offset: 2 in ...\Sales.php on line 174 
Notice: Undefined offset: 3 in ...\Sales.php on line 174 
Notice: Undefined offset: 4 in ...\Sales.php on line 174 

Linie 174 ist dieses:

$totalChannelSales[$i] = $totalChannelSales[$i] + $value->Sales; 

Und ich bekomme nicht wo ist das Problem, wenn auch die Antwort richtig ist (wie Sie sich summieren könnten)

Irgendwelche Idee?

EDIT:

I eine Lösung, die durch Zugabe des doppelten Linie

 $totalChannelSales[0] = 0; 
    bekommen haben
  • einmal nach dem Array zu schaffen und vor dem ersten foreach
  • ein zweites Mal zwischen den beiden für jeden nach dem ersten foreach endet
+1

schreiben $ totalChannelSales [$ i] = $ value-> Sales; – RJParikh

+2

'$ totalChannelSales [$ i] = $ wert-> Verkäufe;' –

Antwort

1

Array wird Ihren Wert einzeln aus der Schleife füllen. Sie müssen es nicht hinzufügen.

Verwenden Sie den folgenden Code.

$totalChannelSales[$i] = $value->Sales; 
+0

Leider Ihre Lösung gibt die falsche Antwort: Ich brauche alle Verkäufe von jedem der Kanäle hinzuzufügen (15, 22, 18 und 20) Wenn ich deine Lösung verwende, bekomme ich nur den letzten Verkauf von jedem Kanal (5, 7, 6, 6 und 11) –

0

Ich denke, Ihr Problem hier ist

$totalChannelSales[$i] = $totalChannelSales [$i] + $value->Sales; 

Sie versuchen Index zu setzen, die nicht einmal existieren, können Sie für diesen Einsatz array_push kann, wird es Elemente und Iterierte Indizes drücken.

0

Ich werde Sie durch Ihren Code Fehler herauszufinden:

foreach ($ChannelSales as $ChSales) { 
     foreach ($ChSales as $value) { 
      $totalChannelSales[$i] = $totalChannelSales [$i] + $value->Sales; 
     } 
     ++$i; 
    } 

nun in dem obigen Code können auf sagen $ i = 0 Sie in der ersten Schleife sind und zu diesem Zeitpunkt $totalChannelSales[$i] = $totalChannelSales [$i] + $value->Sales;$totalChannelSales[0] = $totalChannelSales [0] + $value->Sales; wird es so wird den Wert $ totalChannelSales [0] holen, der zu diesem Zeitpunkt nicht existiert, das gleiche gilt für andere Werte von $ i.

0
$totalChannelSales[$i] = $totalChannelSales [$i] + $value->Sales; 

In dem obigen Code, wird kein Wert für $totalChannelSales [$i] in der rechten Seite definiert ist. Sie brauchen nur unter Zuordnung.

$totalChannelSales[$i] = $value->Sales; 
0

Edited:

ich einen temporären Variable $ tempsum eingeführt habe, die alle nicht definierten Probleme entfernen.

public function getChannelsSales ($ChannelSales) { 
    $totalChannelSales = array(); 
    $i = 0; 
    foreach ($ChannelSales as $ChSales) { 
     $tempsum = 0; 
     foreach ($ChSales as $value) { 
      $tempsum += $value->Sales; 
     } 
     $totalChannelSales[$i] = $tempsum; 
     $i++; 
    } 
    return $totalChannelSales; 
} 
+0

Ich tat es, aber es gab immer noch die Nachricht: Hinweis: Undefined offset: 4 in .. . \ Sales.php on line 174 –

+0

Würden Sie bitte versuchen, $ i ++ anstelle von ++ $ i, nur einen Versuch. – naf4me

+0

@RafaelMunoz Ich habe den Code bearbeitet. Dies wird das Problem lösen, ohne mehr 0 Zuweisung einzuführen. – naf4me