Read elements from array in php

I have a problem with my account, 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 there is a solution to retrieve this array?

+3


source to share


4 answers


You can use a different container to combine the counters, initialize each one, and sum them over 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);

      



Output example

+1


source


$msg_to_count = array_reduce($arr, function($memo, $el) {
  if (array_key_exists($el['message'], $memo))) {
    $memo[$el['message']] += $el['msg_cnt']
  } else {
    $memo[$el['message']] = $el['msg_cnt']
  }
return $memo;
}, array());

      

The above array will create an array message ⇛ count

. If you need to revert to an array of items such as these, this can be done with simple iteration:



$result = []
foreach($msg_to_count as $k=>$v) {
  $result[] = array('message' => $k, 'count' => $v);
}

      

0


source


Check it if you don't tell me further

<?php
        function array_count($array,$val) {
          $count = 0;
            foreach ($array as $k => $v) {
                if($v['message'] == $val){
                  $count = $v['msg_cnt'] + $count;
                }
            }
            return $count;
        }

        $temp =array(
          array('message'  => 'non', 'msg_cnt' => 1),
          array('message' => 'non', 'msg_cnt' => 1),
          array('message' => 'non', 'msg_cnt' => 2),
          array('message' => 'oui', 'msg_cnt' => 1 ),
          array('message' => 'non','msg_cnt'  => 1)
        );

        $final = array();
        foreach ($temp as $value) {
          if(!array_key_exists($value['message'], $final)){
            $final[$value['message']] = array_column($temp, $value['message']);
          }
        }

        echo '<pre>';
        print_r($final);
        echo '</pre>';
        exit();

        ?>

      

0


source


-1


source







All Articles