【问题标题】:Grouping a php object对 php 对象进行分组
【发布时间】:2014-04-24 17:23:15
【问题描述】:

我有一个 php 对象,输出为:

Array ( 
    [0] => stdClass Object ( 
        [id] => 25 
        [itemid] => 13 
        [studentid] => 9 
        [score] => 22 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst9 
        [lastname] => studentlast9
    ) 
    [1] => stdClass Object ( 
        [id] => 26 
        [itemid] => 13 
        [studentid] => 10 
        [score] => 23 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst10 
        [lastname] => studentlast10 
    ) 
    [2] => stdClass Object ( 
        [id] => 1 
        [itemid] => 1 
        [studentid] => 1 
        [score] => 2 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst1 
        [lastname] => studentlast1 
    ) 
    [3] => stdClass Object ( 
        [id] => 2 
        [itemid] => 1 
        [studentid] => 2 
        [score] => 3 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst2 
        [lastname] => studentlast2 
    ) 
    [4] => stdClass Object ( 
        [id] => 9 
        [itemid] => 5 
        [studentid] => 1 
        [score] => 6 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst1 
        [lastname] => studentlast1 
    ) 
    [5] => stdClass Object ( 
        [id] => 10 
        [itemid] => 5 
        [studentid] => 2 
        [score] => 7 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst2 
        [lastname] => studentlast2 
    ) 
    [6] => stdClass Object ( 
        [id] => 17 
        [itemid] => 9 
        [studentid] => 1 
        [score] => 10 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst1 
        [lastname] => studentlast1 
    ) 
    [7] => stdClass Object ( 
        [id] => 18 
        [itemid] => 9 
        [studentid] => 2 
        [score] => 11 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst2 
        [lastname] => studentlast2 
    ) 
    [8] => stdClass Object ( 
        [id] => 3 
        [itemid] => 2 
        [studentid] => 1 
        [score] => 3 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst1 
        [lastname] => studentlast1 
    ) 
    [9] => stdClass Object ( 
        [id] => 4 
        [itemid] => 2 
        [studentid] => 2 
        [score] => 4 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst2 
        [lastname] => studentlast2 
    )
    [10] => stdClass Object ( 
        [id] => 11 
        [itemid] => 6 
        [studentid] => 1 
        [score] => 7 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst1 
        [lastname] => studentlast1
    )
    [11] => stdClass Object ( 
        [id] => 12 
        [itemid] => 6 
        [studentid] => 2 
        [score] => 8 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst2 
        [lastname] => studentlast2 
    )
    [12] => stdClass Object ( 
        [id] => 19 
        [itemid] => 10 
        [studentid] => 1 
        [score] => 11 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst1 
        [lastname] => studentlast1 
    )
    [13] => stdClass Object ( 
        [id] => 20 
        [itemid] => 10 
        [studentid] => 2 
        [score] => 12 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst2 
        [lastname] => studentlast2 
    )
    [14] => stdClass Object ( 
        [id] => 7 
        [itemid] => 4 
        [studentid] => 1 
        [score] => 5 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst1 
        [lastname] => studentlast1 
    )
    [15] => stdClass Object ( 
        [id] => 8 
        [itemid] => 4 
        [studentid] => 2 
        [score] => 6 
        [imagealt] => 
        [timemodified] => 0 
        [data] => 
        [firstname] => studentfirst2 
        [lastname] => studentlast2 
    )
)

正如所见,只有两个studentid 具有不同的itemid。我想将它们分组并打印为如下表格:

                  itemidid1    itemidid2   itemidid3
studentid1            x1          x2             x3
studentid2            y1          y2             y3

我正在尝试以下代码,但它显示的所有值都在一个下方。

<?php foreach ($hits as $hit): ?>
            <?php if ($hit->studentid == $current_id): ?>
                <td> <?php echo $hit->score; ?> </td>
            <?php else: ?>
                <?php if ($current_id != -1): ?>
                    </tr>
                <?php endif; ?>
                <?php $current_id = $hit->studentid; ?>
                <tr>
                    <td><a href="#" id="<?php echo $hit->studentid; ?>" class="student-grade-data"> <?php echo $hit->firstname.' '.$hit->lastname; ?> </a></td>
                    <td> <?php echo $hit->score; ?>
                </td>
            <?php endif; ?>
        <?php endforeach; ?>

【问题讨论】:

  • “正如你所见”...数组输出很大。你能减少示例输入吗?
  • 首先遍历所有对象并将它们存储在按 ID 分组的缓冲区数组中,然后遍历该缓冲区并输出 HTML
  • 显示您的查询,select * ....
  • 我对你的问题有点困惑——当你说“只有两个studentid 有不同的itemid”时,你的意思是多个而不是不同?例如studentid 9 和 10 只有 itemid 13。studentid 1 和 2 有多个 itemid 实例。是否要从表中排除 9 和 10,因为它们只有一个 itemid,并且只显示 1 和 2?
  • 另一件事......在你上面的表格中,xy 前缀来自哪里,它们代表什么?它们看起来很重要,但它们不在您的源数据中,也不在您的代码 sn-p 中。

标签: php arrays html-table


【解决方案1】:

遍历所有对象并将对象收集在两个数组中,例如:

$byStudentId[$hit->studentid] = $hit;
$byItemId[$hit->itemId] = $hit;

然后您可以通过array_keys($byItemId) 获取列,最后通过循环 $byStudenId 来构建表格

【讨论】:

    【解决方案2】:

    你必须实现你的查询,添加group by子句,比如group by field name

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      • 2022-12-16
      • 2018-05-01
      • 2021-05-04
      • 1970-01-01
      • 2015-10-19
      相关资源
      最近更新 更多