0

I have an array like this

$estimate[0]=>
'gear' =>'MMG'
'total' =>  315
   'efforts' => 9
   'afh' => 18

$estimate[1]=>
    'gear' =>'MMG'
    'total' =>  400
       'efforts' => 2
       'afh' => 6

$estimate[2]=>
    'gear' =>'BOO'
    'total' =>  200
       'efforts' => 20
       'afh' => 16

$estimate[3]=>
    'gear' =>'BOB'
    'total' =>  250
       'efforts' => 20
       'afh' => 16

I want to calculate the sum of total, efforts and afh in which gear is same and it will be stored in the another array. Following my coding is working when the array (estimate) size is less than 5.

$calculate = array();   
for($et=0;$et<count($estimate);):   
if($et==0):
    $calculate[$et]['gear'] = $estimate[$et]['gear'];
    $calculate[$et]['total'] = $estimate[$et]['total'];
    $calculate[$et]['efforts'] = $estimate[$et]['efforts'];
    $calculate[$et]['afh'] = $estimate[$et]['afh'];                 
    goto loopend;
endif;
for($cet=0;$cet<count($calculate);$cet++):
    if($estimate[$et]['gear'] == $calculate[$cet]['gear']):
        $calculate[$cet]['total'] = $calculate[$cet]['total'] + $estimate[$et]['total'];
        $calculate[$cet]['efforts'] = $calculate[$cet]['efforts'] + $estimate[$et]['efforts'];
        $calculate[$cet]['afh']    = $calculate[$cet]['afh'] + $estimate[$et]['afh'];                       
        goto loopend;   
    endif;
endfor;
    $calculate[$et]['gear'] = $estimate[$et]['gear'];
    $calculate[$et]['total'] = $estimate[$et]['total'];
    $calculate[$et]['efforts'] = $estimate[$et]['efforts'];
    $calculate[$et]['afh'] = $estimate[$et]['afh'];                 
    goto loopend;
loopend:$et++;  
endfor; 

The coding is not working more than many gears. Sometimes it works. I can't find the issues. Please help me to solve the issues.

4
  • use foreach loop instead of for loop.. check this question stackoverflow.com/questions/1496682/… Commented May 31, 2018 at 10:43
  • Wow, a GOTO I have not seen one of those in years Commented May 31, 2018 at 10:52
  • @BilalAhmed is not working Commented May 31, 2018 at 10:55
  • Try this link for similar issue Commented May 31, 2018 at 10:55

3 Answers 3

1

You might use array_reduce:

$result = array_reduce($estimate, function($carry, $item) {
    if (!isset($carry[$item["gear"]])) {
        $carry[$item["gear"]] = $item;
        return $carry;
    }

    $carry[$item["gear"]]["total"] += $item["total"];
    $carry[$item["gear"]]["efforts"] += $item["efforts"];
    $carry[$item["gear"]]["afh"] += $item["afh"];

    return $carry;
});

Demo

Sign up to request clarification or add additional context in comments.

Comments

1

As per my comment use foreach loop when your array length is not define

Here is your desired code

   <?php
 $estimate = array( 
            "0" => array (
               "gear" => 35,
               "total" => 30,   
               "efforts" => 39,
               "afh" => 39,
            ),

           "1" => array (
               "gear" => 35,
               "total" => 30,   
               "efforts" => 39,
               "afh" => 39,
            ),

            "2" => array (
               "gear" => 35,
               "total" => 30,   
               "efforts" => 39,
               "afh" => 39,
            ),
         );
 $gear=0;
 $total=0;
 $efforts=0;
 $afh=0;
 foreach ($estimate as $key => $value) {
        $gear=$gear+$value['gear'];
        $total=$gear+$value['total'];
        $efforts=$gear+$value['efforts'];
        $afh=$gear+$value['afh'];
 }
 echo "<pre>";
 $result = array('gear' => $gear, 'total' => $total,'efforts' => $efforts,'afh' => $afh);
 echo "<pre>";
print_r($result);

you can check the result HERE

2 Comments

I want the result in array
Its wrong.Here array(gear) is character and calculate the sum in which gear is same.
1
  <?php 

  $new_arr = array();
  $estimate[0] =array(
    'gear' =>'MMG',
    'total' =>  315,
    'efforts' => 9,
    'afh' => 18
  );
  $estimate[1]=array(
    'gear' =>'MMG',
    'total' =>  400,
    'efforts' => 2,
    'afh' => 6,
  );
  $estimate[2]=array(
    'gear' =>'BOO',
    'total' =>  200,
    'efforts' => 20,
    'afh' => 16,
  );
  $estimate[3]=array(
    'gear' =>'BOB',
    'total' =>  250,
    'efforts' => 20,
    'afh' => 16,
  );

  foreach ($estimate as $key => $value) {
   $new_arr[$value['gear']] = array(
      'total'   =>  (isset($new_arr[$value['gear']]['total']) ? ($new_arr[$value['gear']]['total']  + $value['total']) : $value['total'] ),
      'efforts' =>  (isset($new_arr[$value['gear']]['efforts']) ? ($new_arr[$value['gear']]['efforts']  + $value['efforts']) : $value['efforts'] ),
      'afh'     =>  (isset($new_arr[$value['gear']]['afh']) ? ($new_arr[$value['gear']]['afh']  + $value['afh']) : $value['afh'] )
   );
  }


  echo "<pre>";print_r($new_arr);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.