2017-12-13 20 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의 합을 싶어. 그래서 나는이 코드를 사용 : 나는 5를 얻을 수 있기 때문에 그것은 Nights 근무 보인다

$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을해야하는 반면 Item 위해 난 단지 1를 얻을.

사실 내가 가진 :

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

내가해야 반면 :이 반영하려면 코드를 변경하려면 어떻게

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

를?

+0

이해 해달라고. '핫도그 '는 무엇을하고 있습니까? 그것도 계산해야하나요? 'Night'의 값을 가진 키의 수를 계산하고 싶습니까? –

+0

외부 루프 용으로 두 개를 사용하고 내부 루프 용으로 두 개를 사용하고 내부 루프에 하나를 사용하여 필드에 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 명은 '밤'의 가치가 있습니다. 마지막 하나는 'Item'값을 가지므로 array_count_values ​​()에이 값을 입력하면 array가 정확한 결과를 얻습니다. 5 '밤'요소 1 '밤'요소 :

먼저 모든 'NDC_Quantity의 배열을 얻을 :

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

는 다음과 같은 것을 할 수있다'NDC_Quantity '의 합계를 얻기 위해 그런 말로 미루어 '값 :

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

그런 다음 당신은 총을 계산하는() 함수를 array_sum 사용할 수 있습니다

$ndc_quantity_total = array_sum($ndc_quantities);