假设我的 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_new和Winner_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 之前对结果进行排序。
任何建议如何做到这一点?