我使用codeigniter来构建组织办公室用户的表,根据某人使用办公室的次数。因此,该表将包括用户名,使用次数以及使用办公室次数最多(使用次数最多)的用户位于顶部的排名/位置。就像游戏排行榜一样,得分最高的用户位居榜首。
我有这段代码:
<?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;?>
此代码列出了从最高到最低使用率最高的用户。 显示前10名。
但是,如果一个以上的用户具有相同的使用次数,则表格上的位置会有所不同,因为我会为循环中的每个项目增加位置$ i。
我尝试了这段代码,但它并不像我想要的那样完成。
<?php
$i=1;
$uses=null;
?>
<? foreach ($leaders as $item):
if($i==11) break;
if ($uses== $item['Uses']) {
$i=$i;
} else {
$i=$i++;
}
?>
<tr>
<td><?= $i; ?></td>
<td><?= $item['Name']; ?></td>
<td><?= $item['Uses']; ?></td>
</tr>
<?= $uses=$item['Uses']; ?>
<?php endforeach;?>
如何解决此问题,以便具有相同使用次数的用户显示在同一位置。例如,John,Mary和Carl都有5个用途,他们都应该有位置2($i
),而不是2,3,4。
因此,具有相同使用次数$item['Uses'];
的所有用户具有相同的位置$i
。
编辑
尝试实现这样的目标:
$previous_value = 0;
foreach ($arr as $key=>$value) {
echo $key .'=>'. $previous_value .' '. $value;
$previous_value = $value;
}
我基本上想说,如果使用==之前的项目使用,则$ i与循环中prev项目中的$ i相同,否则,$ i ++
答案 0 :(得分:1)
好吧,假设你已经订购了用户,你的foreach中应该只有10个(尝试在SQL查询中使用限制10,或从数组中提取它们),并且你可以避免使用中断在里面。没关系,你的问题是如何处理重复的用户。您只需要检查以前的值是否重复。如果没有,增加并继续前进。下面你有一个带循环的PHP文件,是一个独立的文件,你可以复制粘贴并运行它,你就会有你的列表:
<?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'];
}
最重要的是初始值,如您所见,我使用第一个用户的值在$prev_uses
初始化它。
如果您确实需要使用休息时间(我建议您不要使用它来避免不必要的检查),修改将是:
$position = 1;
$user_count = 1;
$prev_uses = $users[0]['uses'];
foreach ( $users as $user ) {
if ( $user_count == 11 ) {
break;
} else {
$user_count++;
}
if ( $prev_uses != $user['uses'] ) {
$position++;
}
echo $position . ' - Name: ' . $user['name'] . ' Values: ' . $user['uses'] . '<br>';
$prev_uses = $user['uses'];
}
如你所见,你需要两个变量才能继续计算,XD
答案 1 :(得分:0)
假设您的阵列已按使用顺序排列。您可以替换此行:
首先这样做:
<?php
$uses = array('','');
foreach ($leaders as $item):?>
<?= $uses=$item['Uses']; ?>
通过
<?php $uses=array($i,$item['Uses']); ?>
所以你可以这样做:
<?php
if ($uses[1] == $item['Uses']){
$i=$uses[0];
else{
$i=$i++;
}
?>