2017-12-13 29 views
-1

Ich habe dieses Array in PHP:Wie finde ich die Summe der Werte für jede eindeutige Subarray-Kennung?

Array 
(
    [0] => Array 
     (
      [NDC_ItemType] => Night 
      [NDC_Item] => Night 
      [NDC_Quantity] => 1 
     ) 

    [1] => Array 
     (
      [NDC_ItemType] => Night 
      [NDC_Item] => Night 
      [NDC_Quantity] => 1 
     ) 

    [2] => Array 
     (
      [NDC_ItemType] => Night 
      [NDC_Item] => Night 
      [NDC_Quantity] => 1 
     ) 

    [3] => Array 
     (
      [NDC_ItemType] => Night 
      [NDC_Item] => Night 
      [NDC_Quantity] => 1 
     ) 

    [4] => Array 
     (
      [NDC_ItemType] => Night 
      [NDC_Item] => Night 
      [NDC_Quantity] => 1 
     ) 

    [5] => Array 
     (
      [NDC_ItemType] => Item 
      [NDC_Item] => Hot-Dog 
      [NDC_Quantity] => 5 
     ) 

) 

ich die Summe der NDC_Quantity aus dieser Reihe erhalten möchten. So habe ich diesen Code:

$countArr = @array_count_values(array_column($billingDatas, 'NDC_ItemType')); 
$count_Nights = ($countArr['Night']>=1) ? $countArr['Night'] : '0'; 
$count_Items = ($countArr['Item']>=1) ? $countArr['Item'] : '0'; 

Es sieht für die Nights zu arbeiten, weil ich 5 bekommen, aber für die Item ich nur 1 während es 5 auch sein sollte.

Eigentlich habe ich:

Array 
(
    [Night] => 5 
    [Item] => 1 
) 

Während ich haben sollte:

Array 
(
    [Night] => 5 
    [Item] => 5 
) 

Wie kann ich meinen Code ändern, um dies zu reflektieren?

+0

ich verstehe nicht. Was macht der Hot-Dog? Soll es auch gezählt werden? Willst du nur die Anzahl der Schlüssel mit dem Wert von 'Night' zählen? –

+0

Verwenden Sie zwei For-Schleifen eine für die äußere und eine andere für die innere und in der inneren Schleife fügen Sie eine Bedingung, um zu bestimmen, ob das Feld Int enthält oder nicht (als Menge kann nicht float sein), wenn ja, dann weiter Hinzufügen sonst fortfahren – UserID0908

Antwort

2

Code: (Demo)

$array=[ 
    ['NDC_ItemType'=>'Night','NDC_Item'=>'Night','NDC_Quantity'=>1], 
    ['NDC_ItemType'=>'Night','NDC_Item'=>'Night','NDC_Quantity'=>1], 
    ['NDC_ItemType'=>'Night','NDC_Item'=>'Night','NDC_Quantity'=>1], 
    ['NDC_ItemType'=>'Night','NDC_Item'=>'Night','NDC_Quantity'=>1], 
    ['NDC_ItemType'=>'Night','NDC_Item'=>'Night','NDC_Quantity'=>1], 
    ['NDC_ItemType'=>'Item','NDC_Item'=>'Hot-Dog','NDC_Quantity'=>5] 
];  

foreach($array as $row){ 
    if(!isset($result[$row['NDC_ItemType']])){ 
     $result[$row['NDC_ItemType']]=$row['NDC_Quantity']; // on first occurrence just store the quantity 
    }else{ 
     $result[$row['NDC_ItemType']]+=$row['NDC_Quantity']; // on all future occurrence, add the quantity 
    } 
} 
var_export($result); 

Ausgang:

array (
    'Night' => 5, 
    'Item' => 5, 
) 
0

Hier ist eine Erklärung von, was geschieht:

Zuerst muss man sehen, was array_column() zurückkehrt. Es gibt Ihnen unter Array:

Array 
    (
    [0] => Night 
    [1] => Night 
    [2] => Night 
    [3] => Night 
    [4] => Night 
    [5] => Item 
) 

Wie Sie sehen können sie die Werte von ‚NDC_ItemType‘ Spalte für alle 6-Arrays genommen hat. 5 von ihnen haben den Wert 'Night'. Die letzte hat den Wert 'Item', also wenn Sie dies in array_count_values ​​() unter array eingeben, ist das genau das richtige Ergebnis. 5 'Night' Elemente, 1 'Night' Element:

Array 
(
    [Night] => 5 
    [Item] => 1 
) 

auch sagen, dass die Summe von 'NDC_Quantity' bekommen Sie so etwas wie unten tun können:

Zuerst sollten Sie eine Reihe von all ‚NDC_Quantity 'Werte:

$ndc_quantities = array_column($billingDatas, 'NDC_Quantity'); 

Dann können Sie verwenden array_sum() gibt die Gesamt zu berechnen:

$ndc_quantity_total = array_sum($ndc_quantities); 
Verwandte Themen