0

假设我的 header.php 中有这个循环:

<div id="top-20">
    <h2 class="top-20-title">TOP 20 TEAMS</h2>

    <div class="top-20-content">

        <?php
            $params = array(
               'limit'   => -1 // get everything
            );

            $matches = pods( 'matches', $params );

            if ( 0 < $matches->total() ) {
                while ( $matches->fetch() ) {
            ?>

                 <?php echo $matches->field( 'winner_team' ); ?>
                 <br>

            <?php
                    } // end of while loop
                } // end of if any exists
            ?>

    </div><!-- /top-20-content -->  
</div><!-- /top-20 -->  

这就是我的简化表的样子:

id | team_1 | team_2 | winner_team
--------------------------------
1  | 3      | 15     | 3
--------------------------------
2  | 20     | 8      | 8
--------------------------------
3  | 18     | 11     | 18
--------------------------------
4  | 8      | 7      | 8
--------------------------------
...

但我想要而不是在while循环中回显

<?php echo $matches->field( 'winner_team' ); ?>

创建一个新数组,即$matches_array,它将包含 2 列,如id_newWinner_team_new并将winner_team的值保存在Winner_team_new 中,不是直接在 while 循环中回显它。

然后我想将这个新创建的数组 $matches_array 循环到另一个 while 循环中,在 groupby 出现winner_team_new 和 orderby 他们 DESC 之后。

所以,我会得到这样的东西:

8
3
18

而不是我目前在 while 循环中使用 echo 时得到的:

3
8
18
8

为什么我不能只在sql里面做呢?由于这个错误,我需要使用另一个不使用 $params 或 sql 数组中的条件的数组来完成:https ://github.com/pods-framework/pods/issues/595以及 pods 框架对我来说太复杂的事实将我自己的代码调整到核心中,所以我想通过使用将从 while 循环创建的数组来绕过它。

所以,我需要的是创建一个数组,并根据winner_team 的出现次数从多到少重新排列结果。

我试过使用

$matches_array = array_count_values(array_map($matches,array_keys($new_row)));

然后在while循环中循环它,但它根本不起作用。

我需要按部分计算数组/组的帮助。

我对此几乎一无所知。

我只是猜想我需要在基于相同的winner_team字段进行分组后创建一个新字段,例如wins,其中将存储每个团队(基于winner_team)值的出现次数。然后订购该新数组 DESC。

顺便提一句。表中的所有列都是 INTEGERS

编辑 2: 我已经弄清楚如何将 while 循环中的值存储在一个名为 $matches_array 的新数组中,代码如下所示:

<div id="top-20">
    <h2 class="top-20-title">TOP 20 TEAMS</h2>

    <div class="top-20-content">

        <?php
            $params = array(
               'limit'   => -1 // get everything
            );

            $matches = pods( 'matches', $params );

            if ( 0 < $matches->total() ) {
                while ( $matches->fetch() ) {
            ?>

                 <?php // echo $matches->field( 'winner_team' ); ?>
                      <?php $row_array = $matches->field( 'winner_team' ); ?>
                      <?php $matches_array[]; ?>

                 <br>

            <?php
                    } // end of while loop
                } // end of if any exists
            ?>

    </div><!-- /top-20-content -->  
</div><!-- /top-20 -->

现在,我可能需要在 groupby 之后执行一个 foreach 循环(基于 winner_team 字段中数字的出现)并在输出 DESC 之前对结果进行排序。

任何建议如何做到这一点?

4

1 回答 1

2

最初使您无法按别名列排序的问题应该得到解决。我已经使用初始场景对其进行了测试,并且它正在做它应该做的事情。我认为您可以愉快地放弃这种尝试的解决方法。

于 2012-10-12T05:15:06.357 回答