Signatur
Beschreibung
ldap_sort() sortiert die Einträge eines LDAP-Suchergebnisses (LDAP\Result) clientseitig nach einem bestimmten Attribut. Die Funktion verändert dabei die Reihenfolge der Einträge direkt im Ergebnisobjekt, sodass nachfolgende Aufrufe wie ldap_get_entries() die Daten bereits in sortierter Reihenfolge zurückliefern.
Da die Sortierung clientseitig erfolgt, werden zuerst alle passenden Einträge vom LDAP-Server abgerufen und anschließend lokal sortiert. Bei sehr großen Ergebnismengen kann dies zu erhöhtem Speicher- und Rechenaufwand führen. Für serverseitige Sortierung sollte stattdessen die LDAP-Server-Seitige Sort Control (RFC 2891) verwendet werden, sofern der Server diese unterstützt.
Als sortfilter wird der Name eines LDAP-Attributs übergeben, z. B. cn, sn oder mail. Die Sortierung erfolgt lexikografisch anhand des ersten Werts des jeweiligen Attributs. Besitzt ein Eintrag das angegebene Attribut nicht, wird er typischerweise ans Ende der Ergebnisliste gestellt.
Hinweis: ldap_sort() ist seit PHP 8.0.0 als deprecated markiert und wurde in PHP 8.1.0 entfernt. Für neue Projekte sollte die Sortierung manuell nach dem Abruf der Einträge mit usort() oder ähnlichen PHP-Sortierfunktionen implementiert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ldap Pflicht | LDAP\Connection | Eine gültige LDAP-Verbindungsressource, die zuvor mit ldap_connect() erzeugt und mit ldap_bind() authentifiziert wurde. |
|
| $result Pflicht | LDAP\Result | Das LDAP-Ergebnisobjekt, das z. B. von ldap_search(), ldap_list() oder ldap_read() zurückgegeben wurde. |
|
| $sortfilter Pflicht | string | Der Name des LDAP-Attributs, nach dem sortiert werden soll, z. B. "cn", "sn" oder "uid". Groß-/Kleinschreibung wird in der Regel nicht unterschieden. |
Rückgabewert
true zurück, wenn die Sortierung erfolgreich war, andernfalls false.Beispiele
LDAP-Benutzer alphabetisch nach Nachname sortieren
<?php
$ldap = ldap_connect('ldap://ldap.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheimesPasswort');
$baseDn = 'ou=users,dc=example,dc=com';
$filter = '(objectClass=inetOrgPerson)';
$result = ldap_search($ldap, $baseDn, $filter, ['cn', 'sn', 'mail']);
// Ergebnis clientseitig nach Nachname (sn) sortieren
ldap_sort($ldap, $result, 'sn');
$entries = ldap_get_entries($ldap, $result);
for ($i = 0; $i < $entries['count']; $i++) {
$sn = $entries[$i]['sn'][0] ?? '(kein Nachname)';
$mail = $entries[$i]['mail'][0] ?? '(keine E-Mail)';
echo "$sn: $mail\n";
}
ldap_unbind($ldap);
?>
Alternative: Manuelle Sortierung mit usort() (PHP 8.1+ kompatibel)
<?php
// Empfohlene Alternative zu ldap_sort() ab PHP 8.1
$ldap = ldap_connect('ldap://ldap.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheimesPasswort');
$baseDn = 'ou=users,dc=example,dc=com';
$filter = '(objectClass=inetOrgPerson)';
$result = ldap_search($ldap, $baseDn, $filter, ['cn', 'sn', 'mail']);
$entries = ldap_get_entries($ldap, $result);
// Numerisch indizierte Einträge extrahieren (ohne 'count'-Schlüssel)
$items = [];
for ($i = 0; $i < $entries['count']; $i++) {
$items[] = $entries[$i];
}
// Alphabetisch nach 'sn' sortieren
usort($items, function (array $a, array $b): int {
$snA = $a['sn'][0] ?? '';
$snB = $b['sn'][0] ?? '';
return strcmp($snA, $snB);
});
foreach ($items as $item) {
$sn = $item['sn'][0] ?? '(kein Nachname)';
$mail = $item['mail'][0] ?? '(keine E-Mail)';
echo "$sn: $mail\n";
}
ldap_unbind($ldap);
?>
// Wichtig · Fallstricke
Deprecation: ldap_sort() wurde in PHP 8.0.0 als veraltet markiert und in PHP 8.1.0 vollständig entfernt. Für neue oder migrierte Projekte sollte die Sortierung manuell mit usort() nach dem Abruf der Einträge via ldap_get_entries() erfolgen (siehe zweites Beispiel).
Performance: Da alle Ergebnisse zunächst vollständig vom Server abgerufen werden müssen, bevor die clientseitige Sortierung stattfindet, ist ldap_sort() bei großen Ergebnismengen speicher- und zeitintensiv. Sofern der LDAP-Server RFC 2891 (Server Side Sorting Control) unterstützt, sollte ldap_set_option() mit der entsprechenden Control verwendet werden.
Zeichensatz: Die lexikografische Sortierung erfolgt byteweise und berücksichtigt keine locale-spezifischen Regeln. Umlaute und Sonderzeichen werden möglicherweise nicht wie erwartet sortiert. Für korrekte sprachabhängige Sortierung sollte usort() in Kombination mit collator_compare() (intl-Extension) eingesetzt werden.