我不太确定这是否可行,但无论如何我都会尝试解释,
我们正在尝试为公会制作一个页面,我们希望它显示平均项目级别及其名称。
Name | iLvL
Bob 262
Sam 159
我们目前正在运行一个执行以下操作的脚本:
$members = $guild->getMembers();
这基本上得到了我们公会中所有成员的列表 - 然后我们用foreach循环迭代并再次调用以获取信息
//Character Arrays
foreach($members as $member) {
//Get character information
$mrank = $member['rank'];
$mname = $member['character']['name'];
$mgender = $member['character']['gender'];
$mlevel = $member['character']['level'];
$mrace = $member['character']['race'];
$character = $armory->getCharacter($mname);
$gear = $character->getGear();
$milevel = $gear['averageItemLevelEquipped'];
echo '<td><div align="center" class="style1">'. $mname .'</div></td>';
echo '<td><div align="center" class="style1">'. $milevel .'</div></td> ';
唯一的问题是因为我们迭代它们单数我不太确定如何将平均物品等级从最高到最低排序 - 我听说像rsort这样的东西但我似乎无法让它工作和我想知道是否有人能够伸出援助之手。
由于
答案 0 :(得分:2)
您可以在SQL查询中对成员进行排序。 如果要排序结果数组,请使用uasort:http://www.php.net/manual/en/function.uasort.php
答案 1 :(得分:2)
$members = $guild->getMembers();
创建另一种方法;
$members = $guild->getMembersByiLvL();
将行ORDER BY iLvL DESC
添加到sql查询中。
由于你没有展示$ guild是一个对象的类,我不能说这样做是多么容易 - 但这似乎是一个更好的手段。
然后你可以继续开发这种方法:
$members = $guild->getMembersSorted('iLvL');
编辑:我假设您的数据来自Mysql数据库,所以当然可能是错误的......
答案 2 :(得分:2)
我建议用你在那里的数据创建一个数组,每个人都有一个子数组。还要创建一个仅由averageItemLevelEquipped值组成的数组,然后在runnning array_multisort
时将其用作索引数组。它看起来像这样:
$resourcearray = array();
$indexarray = array();
foreach($members as $member) {
//Get character information
$mrank = $member['rank'];
$mname = $member['character']['name'];
$milevel = $gear['averageItemLevelEquipped'];
//and anything else you want to add goes here, of course
array_push($resourcearray, array('rank' => $mrank, 'charname' => $mname, 'itemlevel' => $milevel));
array_push($indexarray, $milevel);
}
array_multisort($indexarray, $resourcearray);
foreach($resourcearray as $resource) {
echo '<td><div align="center" class="style1">'. $resource['charname'] .'</div></td>';
echo '<td><div align="center" class="style1">'. $resource['itemlevel'] .'</div></td> ';
}
答案 3 :(得分:2)
foreach
遍历输入数组而不对订单进行任何修改。
所以你需要在foreach
之前对输入进行排序或者对foreach迭代的结果进行排序。
通常最好在输入foreach
之前对输入进行排序,方法是
ORDER BY
子句) for 2,PHP中的数组有很多排序函数(看看php.net/manual/en/ref.array.php)。例如,你可以像这样使用usort
:
function cmp($a, $b)
{
if ($a['character']['level'] == $b['character']['level']) {
return 0;
}
return ($a['character']['level'] < $b['character']['level']) ? -1 : 1;
}
$members = $guild->getMembers();
usort($members, 'cmp');
foreach ($members as $member) {
//..
}
如果您有权访问数据库查询并且通常需要以这种方式排序的数据,那么在SQL中使用数据库端排序会更好(性能更好,可读性更好)。