2017-12-13 13 views
-1

私はPHPでこの配列を持っている:一意の各サブアレイ識別子の値の合計を見つける方法は?

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 
     ) 

) 

私はこの配列からNDC_Quantityの合計を取得したいです。だから私はこのコードを使用:

$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'; 

私は5を得るが、それはあまりにも5する必要があり、一方、Itemのために、私は唯一の1を取得するので、それがNightsのために働いて見えます。

は実際に私が持っている:

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

私が持っている必要がありに対し:

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

どのように私はこれを反映するために自分のコードを変更することができますか?

+0

私は理解しません。 「ホットドッグ」は何をしていますか?それも数えられるべきですか? 「Night」の値を持つキーの数だけをカウントしたいですか? –

+0

2つのforループを外側のものと内側のものにそれぞれ1つずつ使用し、内側のループにintを含むかどうかを判断する条件を挿入します(数量は浮動できません)。 – UserID0908

答えて

2

コード:(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); 

出力:

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

ここでは起こっていただきましたいくつかの説明です:

まず、あなたが何をarray_column()リターンを参照する必要があります。

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

このように、6つの配列すべてに対して 'NDC_ItemType'列の値が使用されています。そのうち5つの値は 'Night'です。最後のものは 'Item'という値を持ちます。これをarray_count_values()に渡すと、arrayの配列はまさに正しい結果になります。 5「夜」要素を、1「夜」要素:

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

は、あなたが以下のような何かを行うことができます「NDC_Quantity」の合計を取得するために、と言った:

まず「NDC_Quantityの配列を取得します価値観:

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

その後、あなたは合計を計算するために()関数をarray_sum使用することができます。

$ndc_quantity_total = array_sum($ndc_quantities); 
関連する問題