kev_m
kev_m

Reputation: 325

add database value off array in CodeIgniter

I want to add the values that I got from database..

I have an output of

Array ( 
[0] => stdClass Object ( [TOTAL_TIME] => 10.58 ) 
[1] => stdClass Object ( [TOTAL_TIME] => 9.23 ) 
[2] => stdClass Object ( [TOTAL_TIME] => 10.35 ) 
[3] => stdClass Object ( [TOTAL_TIME] => 10.10 ) 
[4] => stdClass Object ( [TOTAL_TIME] => 9.95 ) 
[5] => stdClass Object ( [TOTAL_TIME] => 3.40 ) 
[6] => stdClass Object ( [TOTAL_TIME] => 9.90 ) 
[7] => stdClass Object ( [TOTAL_TIME] => 10.63 ) 
[8] => stdClass Object ( [TOTAL_TIME] => 10.48 ) 
[9] => stdClass Object ( [TOTAL_TIME] => 9.43 ) 
[10] => stdClass Object ( [TOTAL_TIME] => 6.42 ) 
[11] => stdClass Object ( [TOTAL_TIME] => 10.12 ) 
[12] => stdClass Object ( [TOTAL_TIME] => 9.33 ) 
[13] => stdClass Object ( [TOTAL_TIME] => 5.53 ) 
[14] => stdClass Object ( [TOTAL_TIME] => 9.35 ) 
[15] => stdClass Object ( [TOTAL_TIME] => 9.60 ) 
[16] => stdClass Object ( [TOTAL_TIME] => 10.08 ) 
[17] => stdClass Object ( [TOTAL_TIME] => 10.03 ) 
[18] => stdClass Object ( [TOTAL_TIME] => 7.73 ) 
[19] => stdClass Object ( [TOTAL_TIME] => 16.82 ) 
[20] => stdClass Object ( [TOTAL_TIME] => 16.55 ) )

I want to do is to add those value.

I already did

$sum = array_sum($data)

But it does not work. the only output I got was 0.

How can I add it?

Upvotes: 0

Views: 136

Answers (5)

Alex Andrei
Alex Andrei

Reputation: 7283

Loop over the array and sum up the values of the TOTAL_TIME property of each object together.

$sum = 0;
foreach ($array as $object){
    $sum += $object->TOTAL_TIME;
}

print $sum;

You can also use array_walk as an alternative to the loop

$sum = 0;
array_walk($array,function($object) use (&$sum){
    $sum += $object->TOTAL_TIME;
});

print $sum;

Upvotes: 2

Bikash
Bikash

Reputation: 1938

$array =  (array) $yourObject;

Then you apply array_sum

Upvotes: 0

pr0metheus
pr0metheus

Reputation: 488

If you want to store in variable sum of value TOTAL_TIME try this

$total_time = 0;
if (!empty($data)) {
    foreach ($data as $value) {
        $total_time += $value->TOTAL_TIME;
    }
}

If you get that data from database, i suggest to use SUM on the query so we return variable and don't need to perform foreach loop.

Upvotes: 0

Brijal Savaliya
Brijal Savaliya

Reputation: 1091

Use this code

function convertObjectToArrayWithSum($data)
{
    if (is_object($data))
    {
        $data = get_object_vars($data);
    }
    if (is_array($data))
    {
        $input = array_map(__FUNCTION__, $data);
        array_walk_recursive($input, function($item, $key) use (&$final) {
            $final[$key] = isset($final[$key]) ? $item + $final[$key] : $item;
        });
        return $final;
    }
    return $data;
}
print_r(convertObjectToArrayWithSum($data));

Upvotes: 0

lavavrik
lavavrik

Reputation: 845

You can use array_reduce:

$total_time = array_reduce($arr, function($carry, $item) {
    return $carry += $item->TOTAL_TIME;
}, 0);

array_reduce @ php.net

Upvotes: 1

Related Questions