2016-11-08 2 views
0

ich so ein Mulit demensional Array ...Get Summe von Subarrays in einem Schlüsselwert Array zusammen

enter image description here

** beachten Sie die Array-Klammern hat schließen, die nicht in diesem Bild dargestellt ist. Es gibt also kein Problem in der Syntax.

Ich möchte die Werte in jeder Taste (Offenheit, Gewissenhaftigkeit) addieren, so dass ich ein Array wie haben:

 Array{ 
       [Openness]=> Array(
        [0] => 16 
      ) 
       [Conscientiousness]=>Array (
        [0]=> 10 
      ) 
     } 

Wenn ich diesen Code versucht, nach den bestehenden Fragen der Suche durch:

 $sumArray = array(); 

    foreach ($finalarr as $k=>$subArray) { 
     foreach ($subArray as $id=>$value) { 
     //$sumArray[$id]+=$value; 
     array_key_exists($id, $sumArray) ? $sumArray[$id] += $value :  $sumArray[$id] = $value; 
      } 
     } 

    print_r($sumArray); 

ich:

enter image description here

das ist nicht was ich will. Any Ideen, wie man das Array repariert?

+0

Werfen Sie einen Blick auf 'array_sum()' – Rizier123

+0

Die Schlüssel von '$ sumArray' sollten' $ k' sein, nicht '$ id'. – Barmar

+0

danke es hat funktioniert! – Shayuh

Antwort

0

Sie können es mit array_sum() und eine Schleife:

$sumArray = array(); 
foreach ($finalarr as $k => $subArray) { 
    $sumArray[$k] = array_sum($subArray); 
} 

Wenn Sie wirklich die Elemente $sumArray müssen Arrays eher sein als nur die Summen, es wird:

$sumArray = array(); 
foreach ($finalarr as $k => $subArray) { 
    $sumArray[$k] = array(array_sum($subArray)); 
} 

Aber ich bin mir nicht sicher, warum du das willst.

+0

Ich bekomme eine Fehlermeldung, dass array_sum erwartet, dass Parameter 1 Array ist, wenn ich das erste Bit Ihrer Codierung ausführen. Wie auch immer, ich habe meine Lösung unter Berücksichtigung aller Kommentare veröffentlicht. – Shayuh

+0

Ich sehe nicht, wie Ihre funktioniert, wenn meine nicht funktioniert. Sie rufen 'array_sum()' mit demselben Wert auf. – Barmar

0

Okay, wie in den Kommentaren vorgeschlagen, ich habe die array_sum verwendet und es hat funktioniert. Ich habe die foreach:

** die innere Schleife entfernt, die

foreach ($finalarr as $k=>$subArray) { 

     $finalarr[$k]=array_sum($subArray); 

} 

und es gab mir die Ausgabe nicht notwendig war:

 Array{ 
      [Openness]=> 16 
      [Conscientiousness]=> 10 

    } 

Danke für die Kommentare !!

+0

Was ist der Sinn der inneren Schleife? Sie verwenden niemals '$ id' oder' $ value'. Sie machen immer die gleiche Summe von $ subArray. – Barmar

+0

Woher kommen diese Klammern in der Ausgabe? Sie haben ')' ohne passendes '('. – Barmar

+0

Ich entfernte die innere Schleife und bekam das gleiche Ergebnis, so dass Ihr Recht, dass die zweite Schleife nicht benötigt wird! Danke. – Shayuh

Verwandte Themen