我想根据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 ?>
但是没有运气..任何想法如何充实?
答案 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文档后,您应该能够进一步了解我精心设计的功能。
我希望这会有所帮助。