I have an array of objects that I am getting values for using foreach:
foreach($type as $value){
$value->Type;
};
If I ECHO
this, I get results like:
type1
type2
type3
etc.
The mysql is
$type = $wpdb->get_results($wpdb->prepare("SELECT Type FROM mytablename"));
Great! Now since they are objects, if I wanted to get a count on each variation of the type and display that in a table how would I do that?
I have tried adding things like SELECT COUNT(Type), type FROM mytablename
or the like and then using my FOREACH
loop but that is invalid.
I know how to build a table in PHP with ECHO '<table>' .... '</table>'
but don’t know what I am using for the variable in the TD
of each in order to achieve this.
Desired Result:
+++++++++++++++++++++++++++++++++++++++
+ type1 +++ type2 +++ type3 +++ type4 +
+ 2 +++ 3 +++ 1 +++ 5 +
+++++++++++++++++++++++++++++++++++++++
Advertisement
Answer
We can use several built in array functions to get the result you want. By using array_map, we can get the property Type of each object. We can then use array_count_values to get the frequency of each type.
<?php
$frequencies = array_count_values(
array_map(
function ($v) {
return $v->Type;
},
$type
)
);
ksort($frequencies, SORT_NATURAL);
?>
Finally, the table can be rendered using PHP as follows using both array_keys which will return the unique types. While array_values will return the matching frequencies.
<table>
<tr>
<?php foreach (array_keys($frequencies) as $type) : ?>
<th><?= $type ?></th>
<?php endforeach; ?>
</tr>
<tr>
<?php foreach (array_values($frequencies) as $frequency) : ?>
<td><?= $frequency ?></td>
<?php endforeach; ?>
</tr>
</table>