按计数结果排序数组Php

时间:2015-08-03 01:44:19

标签: php

我想根据php循环中的结果计数对结果进行排序。模板中的代码看起来像这样

<?php foreach($groups as $group): ?>
        <?php if(count($group->getAllgroupmember()) > 0): ?>
            <tr>
                <td><?php echo $group->id ?></td>
                <td><?php echo $group->name ?></td>
                <td><?php echo number_format(count($group->getAllgroupmember())) ?></td>
            </tr>
        <?php endif ?>
        <?php var_dump(count($group->getAllgroupmember())) ?>
    <?php endforeach ?>

var_dump结果

int(1) int(1) int(4) int(0) int(1) int(0) int(0) int(0) int(0) int(0) int(1) int(0) int(0) int(0) int(0) int(0) int(0) int(0) int(0) int(0) int(0) int(0) int(0) int(0)

如何根据结果计数进行排序?最高值(4)应该在0位置。我试过usort功能

<?php foreach(usort($groups) as $group): ?>
        <?php if(count($group->getAllgroupmember()) > 0): ?>
            <tr>
                <td><?php echo $group->id ?></td>
                <td><?php echo $group->name ?></td>
                <td><?php echo number_format(count($group->getAllgroupmember())) ?></td>
            </tr>
        <?php endif ?>
        <?php var_dump(count($group->getAllgroupmember())) . "<br>" ?>
    <?php endforeach ?>

但是没有运气..任何想法如何充实?

1 个答案:

答案 0 :(得分:2)

usort需要callable作为第二个参数。见下文:

<?php
$usort($groups, function($a, $b){
    $countA = count($a->getAllgroupmember());
    $countB = count($b->getAllgroupmember());
    if ($countA  == $countB) {
        return 0;
    }
    return ($countA > $countB) ? -1 : 1;
});
?>
<?php foreach($groups as $group): ?>
        <?php if(count($group->getAllgroupmember()) > 0): ?>
            <tr>
                <td><?php echo $group->id ?></td>
                <td><?php echo $group->name ?></td>
                <td><?php echo number_format(count($group->getAllgroupmember())) ?></td>
            </tr>
        <?php endif ?>
        <?php var_dump(count($group->getAllgroupmember())) . "<br>" ?>
    <?php endforeach ?>

我上面制作的排序函数获取每个传入对象的成员计数,并使用这些数字按降序对数组进行排序。

我添加了上面的usort方法的链接。在查看usort文档后,您应该能够进一步了解我精心设计的功能。

我希望这会有所帮助。