我有一个多维数组,我正在尝试对其进行排序,以便具有最多条目的数组首先出现等等。然后,如果两个数组具有相同数量的条目,则应按字母顺序排列。此外,如果条目可以按键排序,名称',我认为这将是伟大的。如下所示,我使用 ldap_sort 按名称'排序。但我确信调用太多的排序函数是不好的做法。
if ($conn == True ) {
Try {
// Authenticate
$bind = ldap_bind($conn, $user, $pass);
// Search AD
$search = ldap_search($conn, $dn, $filter, $attr);
// Sort
ldap_sort($conn, $search, 'name');
// Retrieve Data
$records = ldap_get_entries($conn, $search);
Foreach ($records as $record) {
if(is_array($record) && array_key_exists('l', $record)) {
$locations[$record['l'][0]][] = $record;
}
continue;
}
} finally {
// Close Connection
ldap_close($conn);
}
} else {
trigger_error('Unable_To_Connect_To_Server');
}
// Sort Location By Number Of Entries
array_multisort(array_map('count', $locations), SORT_DESC, $locations);
我想把它作为外行人的条款。按照他们的名字按字母顺序排序条目'价值,应该是固有的。然后,数组应按条目数排序,如果任何数组具有相同数量的条目,则应按字母顺序排序。
P.S。 - 我正在寻求帮助,因为我很难理解多维数组(特别是那些由 ldap_search 返回的数组)并对它们进行排序对我来说更令人难以置信。
编辑就像我说的那样,阵列让我感到困惑,但希望以下内容准确地描述了我的意图:
Array (
[Location1] => Array (
[0] => Array (
[l] => Array (
[count] => 1
[0] => Location1
)
[0] => l
[telephonenumber] => Array (
[count] => 1
[0] => XXX.XXX.XXXX
)
[1] => telephonenumber
[department] => Array (
[count] => 1
[0] => Department1
)
[2] => department
[name] => Array (
[count] => 1 [0] => User1
)
[3] => name
[ipphone] => Array (
[count] => 1
[0] => IPPhone1
)
[4] => ipphone
[mail] => Array (
[count] => 1
[0] => user@domain.com
)
[5] => mail
[count] => 6
[dn] => DistinguishedName1
)
)
)
我剪了上面的短片(有几百条记录被退回),我不确定我是否正确地结束了它。但我本质上是解析信息,输出如下所示。
c_Location1
a_user1
b_user1
c_user1
a_Location2
a_user2
b_user2
b_location3
a_user3
b_user3
答案 0 :(得分:0)
编写一个比较数组长度的函数。如果它们相同,则会比较name
个条目。将其用作usort
的回调函数。
usort($records, function($x, $y) {
if (count($x) == count($y)) {
$u1 = $x['name'][0];
$u2 = $y['name'][0];
return $u1 < $u2 ? -1 :
($u1 > $u2 ? 1 : 0);
} else {
return count($y) - count($x);
}
});