Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Count elements from an array in php

Tags:

arrays

php

I have a problem with my count, please help me.

I have an array :

Array
(
    [0] => Array
        (
            [message] => non
            [msg_cnt] => 1
        )

    [1] => Array
        (
            [message] => oui
            [msg_cnt] => 1
        )

    [2] => Array
        (
            [message] => non
            [msg_cnt] => 1
        )

    [3] => Array
        (
            [message] => oui
            [msg_cnt] => 1
        )
    [4] => Array
        (
            [messsage] => yuop
            [msg_cnt]  => 1

)

Now I want to get :

Array
(
    [0] => Array
        (
            [message] => non
            [msg_cnt] => 2
        )

    [1] => Array
        (
            [message] => oui
            [msg_cnt] => 2
        )
    [2] => Array
        (
            [message] => youp
            [msg_cnt] => 1

)

I tried my code but I didn't get a good result :

for($i=0;$i<count($aResultQuery);$i++){
        if($aResultQuery[$i]['messsage'] == $aResultQuery[$i+1]['messsage']){
            $aResultQuery[$i+1]['msg_cnt']++;
            unset($aResultQuery[$i]);
        }
    }

Please help me. Let me know, if the is a solution to fetch this array?

like image 692
Harea Costea Avatar asked Jul 23 '26 16:07

Harea Costea


1 Answers

You could use another container to merge the counts, set an initial value of each one of them, them sum them up the rest of the loop. Example:

$count = array();
foreach($aResultQuery as $values) {
    if(!isset($count[$values['message']])) {
        $count[$values['message']] = array('message' => $values['message'], 'msg_cnt' => 0);
    }
    $count[$values['message']]['msg_cnt'] += $values['msg_cnt'];
}

$count = array_values($count); // simple reindex

echo '<pre>';
print_r($count);

Sample Output

like image 119
Kevin Avatar answered Jul 25 '26 06:07

Kevin



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!