从foreach循环中对迭代进行排序

时间:2014-06-14 22:30:09

标签: php sorting

我有一个包含用户名的数组:

$a = array('user1','user2');

我想用它们输出用户'列表中的信息,但我需要按名称排序,我从列出它们的foreach循环中的数据库中提取。我该如何排序?

foreach($a as $b) {
    $user = $users->getUser($b); // gets user's details from the database
    $name = $user['name']; // I want the list to be sorted by this variable
    echo $name.'<br />';
}

名称不是唯一的,例如user1和user1都可以命名为John Smith。只有用户名是唯一的。

2 个答案:

答案 0 :(得分:1)

这应该有效。现在它按名称键进行排序,并在第二个循环中循环访问用户。

function sortByName($a, $b) {
    if($a['name'] !== $b['name'])
        return ($a['name'] > $b['name']) 1 : -1;
}

$a = array('user1','user2');
$userList = array();

foreach($a as $b) {
    $userList[] = $users->getUser($b);
}

usort($userList, 'sortByName');

foreach($userList as $person) {
    echo $person['name'];
}

答案 1 :(得分:1)

使用usort和用户定义的比较器

<?php
$users = array();
foreach($a as $b) {
    $user = $users->getUser($b); // gets user's details from the database
    $users[] = $user;
}

usort($users, 'comp_user');
foreach ($users as $user) {
    $name = $user['name'];
    echo $name.'<br />';
}

function comp_user($u1, $u2)
{
    if ($u1['name'] == $u2['name']) {
        return 0;
    }
    return ($u1['name'] < $u2['name']) ? -1 : 1;
}