I’m really confused to this logic and seems I can’t figure it out, basically what i want is to store count if there is same value in next and next element store it on array then the rest store
This is my code
JavaScript
x
$json = '[{
"fight_declaration": "1"
},
{
"fight_declaration": "2"
},
{
"fight_declaration": "2"
},
{
"fight_declaration": "1"
},
{
"fight_declaration": "3"
}
]';
$data = json_decode($json,true);
$count = 0;
$array = [];
while ($current = current($data) )
{
$next = next($data);
if (false !== $next && $next['fight_declaration'] == $current['fight_declaration'])
{
$count++;
$array[]['count'] = $count;
}
}
print_r($count);
What i want output is like this
JavaScript
[{
"count": 1
},
{
"count": 2
},
{
"count": 1
},
{
"count": 1
}
]
In my output i want fight_declaration has same value now i want to count it and store it on array
Thanks
Advertisement
Answer
You could do it like this:
JavaScript
$counts = [];
foreach ($data as $entry) {
if (!isset($previous)) {
$currentCount = ['count' => 1];
} elseif ($entry->fight_declaration === $previous->fight_declaration) {
$currentCount['count']++;
} else {
$counts[] = $currentCount;
$currentCount = ['count' => 1];
}
$previous = $entry;
}
if (isset($currentCount)) {
$counts[] = $currentCount;
}
This basically stores the current count in $currentCount
and, either:
- sets it to 1 if it’s the very first value,
- increments it if it’s the same as the previous,
- adds it to the list of counts and resets it to 1 otherwise,
- stores the last count into the list at the end.