比较PHP foreach项和增量
我正在使用codeigniter根据一个人使用办公室的次数来构建表格组织办公室的用户。因此,该表将包括用户名、使用次数,以及使用次数最多(使用次数最多)的用户位于顶部的排名/位置。就像一个游戏领头板,得分最高的用户在上面比较PHP foreach项和增量,php,codeigniter,loops,foreach,Php,Codeigniter,Loops,Foreach,我正在使用codeigniter根据一个人使用办公室的次数来构建表格组织办公室的用户。因此,该表将包括用户名、使用次数,以及使用次数最多(使用次数最多)的用户位于顶部的排名/位置。就像一个游戏领头板,得分最高的用户在上面 <?php $i=1;?> <?php foreach ($leaders as $item):?> <?php if($i==11) break; ?> <tr> <td><?= $i++; ?
<?php $i=1;?>
<?php foreach ($leaders as $item):?>
<?php if($i==11) break; ?>
<tr>
<td><?= $i++; ?></td>
<td><?= $item['Name']; ?></td>
<td><?= $item['Uses']; ?></td>
</tr>
<?php endforeach;?>
我有以下代码:
<?php $i=1;?>
<?php foreach ($leaders as $item):?>
<?php if($i==11) break; ?>
<tr>
<td><?= $i++; ?></td>
<td><?= $item['Name']; ?></td>
<td><?= $item['Uses']; ?></td>
</tr>
<?php endforeach;?>
我基本上想说,如果uses==previousitem uses,那么$I与循环中prev item中的$I相同,否则,$I++假设数组已经按uses排序。您可以替换此行:
<?php $i=1;?>
<?php foreach ($leaders as $item):?>
<?php if($i==11) break; ?>
<tr>
<td><?= $i++; ?></td>
<td><?= $item['Name']; ?></td>
<td><?= $item['Uses']; ?></td>
</tr>
<?php endforeach;?>
首先要做到:
<?php $i=1;?>
<?php foreach ($leaders as $item):?>
<?php if($i==11) break; ?>
<tr>
<td><?= $i++; ?></td>
<td><?= $item['Name']; ?></td>
<td><?= $item['Uses']; ?></td>
</tr>
<?php endforeach;?>
<?php
$uses = array('','');
foreach ($leaders as $item):?>
<?= $uses=$item['Uses']; ?>
借
<?php $i=1;?>
<?php foreach ($leaders as $item):?>
<?php if($i==11) break; ?>
<tr>
<td><?= $i++; ?></td>
<td><?= $item['Name']; ?></td>
<td><?= $item['Uses']; ?></td>
</tr>
<?php endforeach;?>
所以你可以这样做:
<?php $i=1;?>
<?php foreach ($leaders as $item):?>
<?php if($i==11) break; ?>
<tr>
<td><?= $i++; ?></td>
<td><?= $item['Name']; ?></td>
<td><?= $item['Uses']; ?></td>
</tr>
<?php endforeach;?>
<?php
if ($uses[1] == $item['Uses']){
$i=$uses[0];
else{
$i=$i++;
}
?>
好吧,假设您已经对用户进行了排序,那么您的foreach中应该只有10个(尝试在SQL查询中使用限制10,或者从数组中提取它们),这样您就不必在其中使用分隔符。没关系,你的问题是如何处理那些重复出现的用户。您只需检查上一个值是否重复。如果没有,增加并继续。下面是一个带有循环的PHP文件,是一个独立的文件,您可以复制粘贴并运行它,您将得到您的列表:
<?php $i=1;?>
<?php foreach ($leaders as $item):?>
<?php if($i==11) break; ?>
<tr>
<td><?= $i++; ?></td>
<td><?= $item['Name']; ?></td>
<td><?= $item['Uses']; ?></td>
</tr>
<?php endforeach;?>
<?php
$users = array(
array('name' => 'user1', 'uses' => 30)
, array('name' => 'user2', 'uses' => 30)
, array('name' => 'user3', 'uses' => 22)
, array('name' => 'user4', 'uses' => 20)
, array('name' => 'user5', 'uses' => 16)
, array('name' => 'user6', 'uses' => 16)
, array('name' => 'user7', 'uses' => 15)
, array('name' => 'user8', 'uses' => 10)
);
$position = 1;
$prev_uses = $users[0]['uses'];
foreach ( $users as $user ) {
if ( $prev_uses != $user['uses'] ) {
$position++;
}
echo $position . ' - Name: ' . $user['name'] . ' Values: ' . $user['uses'] . '<br>';
$prev_uses = $user['uses'];
}
如您所见,您需要两个变量来继续计数,XD“它显示前10个变量”仅当数组已按
uses
排序时。我喜欢您的第一句话。。。“我正在起诉codeigniter”:-)为什么你有$I=$I代码>?不必对每一行php代码都执行
。如果你有多行php代码,那么打开标记一次,多行,然后关闭它。@dave我想知道,如果以前用户的使用与此用户相同,我的位置应该相同,否则增加一行。这给了我相同的结果。我编辑了一些作品,以展示我正在努力实现的目标。谢谢
<?php $i=1;?>
<?php foreach ($leaders as $item):?>
<?php if($i==11) break; ?>
<tr>
<td><?= $i++; ?></td>
<td><?= $item['Name']; ?></td>
<td><?= $item['Uses']; ?></td>
</tr>
<?php endforeach;?>