Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较PHP foreach项和增量_Php_Codeigniter_Loops_Foreach - Fatal编程技术网

比较PHP foreach项和增量

比较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++; ?

我正在使用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;?>
我有以下代码:

<?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;?>