首页 > 解决方案 > 将每个 foreach 对象的结果放入它们自己的列中

问题描述

我有一组对象,我正在获取使用 foreach 的值:

foreach($type as $value){
    $value->Type;
};

如果我ECHO这样做,我会得到如下结果:

type1
type2
type3
etc.

mysql是

$type = $wpdb->get_results($wpdb->prepare("SELECT Type FROM mytablename"));

伟大的!现在由于它们是对象,如果我想计算类型的每个变体并将其显示在表格中,我该怎么做?

我尝试添加类似SELECT COUNT(Type), type FROM mytablename或类似的东西,然后使用我的FOREACH循环,但这是无效的。

我知道如何在 PHP 中构建一个表,ECHO '<table>' .... '</table>'但不知道我在TD每个变量中使用什么来实现这一点。

期望的结果:

+++++++++++++++++++++++++++++++++++++++
+ type1 +++ type2 +++ type3 +++ type4 +
+   2   +++  3    +++   1   +++  5    +
+++++++++++++++++++++++++++++++++++++++

标签: phpwordpress

解决方案


我们可以使用几个内置的数组函数来获得您想要的结果。通过使用array_map,我们可以得到每个对象的属性Type。然后我们可以使用 array_count_values 来获取每种类型的频率。

<?php

$frequencies = array_count_values(
    array_map(
        function ($v) {
            return $v->Type;
        },
        $type
    )
);

ksort($frequencies,  SORT_NATURAL);

?>

最后,可以使用 PHP 来呈现表格,使用两个 array_keys 将返回唯一类型。而 array_values 将返回匹配的频率。

<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>

推荐阅读