计算数组中的元素

I want to count the occurence of like and unlike in the array.
$content is either {"userid":"1","like":"1"} or {"userid":"1","unlike":"1"}.
I want to count like and unlike records in table. For my table I need to display like_count=3 and unlike_count=1. Now It displays like_count=5 and unlike_count=5.

enter image description here

$like_count=0;
$unlike_count=0;
 while($like_fet=mysql_fetch_assoc($query))
 {
  $content = $like_fet['CONTENT_VALUE'];
  $datas = json_decode($content);
  foreach($datas as $item)
  {
   $like=$item['like'];
   if($like=='1')
    {
    echo "like";   
    $like_count=$like_count+1;  
    }
   $unlike=$item['unlike'];
   if($unlike=='1')
    {
    echo "unlike";
    $unlike_count=$unlike_count+1;  
    }
  }

 }
  echo "like_count=".$like_count;
 echo "unlike_count=".$unlike_count;

I solved by the code.Its working perfectly.

$like_count=0;
$unlike_count=0;
while($like_fet=mysql_fetch_assoc($query)) {
$json = json_decode($like_fet['CONTENT_VALUE'], true);
if ( isset($json['like']) ) {
    $like_count++;
}
else if ( isset($json['unlike']) ) {
    $unlike_count++;
}

}

The JSON_decode returns an object; not an array, unless the second parameter is added.

When TRUE, returned objects will be converted into associative arrays.

So you could do:

$strings = array('{"userid" :"1","like":"1"}', '{"userid" :"1","like":"1"}', '{"userid" :"1","unlike":"1"}');
$likes = 0;
$unlikes = 0;
foreach($strings as $string){
    $array = json_decode($string);
    if($array->like != '') {
        $likes++;
    }
    if($array->unlike != '') {
        $unlikes++;
    }
}
echo $likes;
echo $unlikes;

Output:

21

or

$strings = array('{"userid" :"1","like":"1"}', '{"userid" :"1","like":"1"}', '{"userid" :"1","unlike":"1"}');
$likes = 0;
$unlikes = 0;
foreach($strings as $string){
    $array = json_decode($string, 1);
    if(!empty($array['like'])) {
        $likes++;
    }
    if(!empty($array['unlike'])) {
        $unlikes++;
    }
}
echo $likes;
echo $unlikes;

Demo: https://eval.in/481191

So your code would be something like:

$like_count=0;
$unlike_count=0;
//while($like_fet=mysql_fetch_assoc($query))
//{
    $content = '{"userid" :"1","like":"1"}'; //$like_fet['CONTENT_VALUE'];
    $datas = json_decode($content, 1);
    foreach($datas as $key => $item) {
        if($key == 'like')
        {
            echo "like";
            $like_count++;
        }
        if($key == 'unlike')
        {
            echo "unlike";
            $unlike_count++;  
        }
    }
//}
echo "like_count=".$like_count;
echo "unlike_count=".$unlike_count;

Output:

likelike_count=1unlike_count=0

I have tried your requirement without Jsondecode. It may help you . I have explained the code under explanation: let me know the output

<?php
$like_count=0;
$unlike_count=0;
 while($like_fet=mysql_fetch_assoc($query))
 {
    $content = $like_fet['CONTENT_VALUE'];
 //$content='{"user_id:"1","unlike":"1"}';
  $str=trim($content,'{}');
  $a=explode(',',$str);
  $a[1]=trim($a[1]);
  $variable='"unlike":"1"';
$com=strcmp($a[1],$variable);

if($com==0){
    $unlike_count=$unlike_count+1;
}
else{
    $like_count= $like_count+1;
}
}
 echo "like_count=".$like_count;
 echo "unlike_count=".$unlike_count;

?>

explanation:

<?php
$str='{"user_id:"1","unlike":"1"}';//assigned $like_fet['content']
$str=trim($str,'{}');// removed {}
$a=explode(',',$str);// splits the string with , which results an array
$unlike_count=0;
$like_count=0;
print_r($a);// print see 
echo"<br>"; // line break
echo $a[1]=trim($a[1]);// removes free space
$variable='"unlike":"1"';// assigning a value as in in the db 
$com=strcmp($a[1],$variable);// compare and check returs 0 if match
if($com==0){
    echo "good";
    echo $unlike_count=$unlike_count+1;
}
else{
    echo"bad";
    echo $like_count= $like_count+1;
}
?>