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
.
$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;
}
?>