usort Issues and Classes

From: Date: Tue, 06 Feb 2001 20:52:39 +0000
Subject: usort Issues and Classes
Groups: php.general 
Request: Send a blank email to php-general+get-38427@lists.php.net to get a copy of this message
Greets, I am playing around with usort and an LDAP class. Basically, I want to sort the results of an LDAP search based on a specific criterion. class CLDAP { var $m_Entries; var $m_LinkIdentifier; ... function Connect() { ... } function Bind() { ... } function FindEntries($BaseDN, $Filter) { $ProcName="CLDAP::FindEntries"; $LDAPSearchResult=ldap_search($this->m_LinkIdentifier, "$BaseDN", "$Filter"); if($LDAPSearchResult) { $Entries=ldap_get_entries($this->m_LinkIdentifier, $LDAPSearchResult); if($Entries) { //print "$ProcName: Entries found for filter of $Filter<br>"; $this->m_Entries = $Entries; } else { // No entries //print "$ProcName: No entries found for filter of $Filter<br>"; } } } //************************* //* SORT CLASS MEMBERS //************************* function MySort() { $ProcName = "CLDAP::MySort"; // Sort the entries ; print "$ProcName: BEFORE: " . $this->m_Entries["count"] . "<br>"; usort($this->m_Entries, array($this,"cmp")); print "$ProcName: AFTER: " . $this->m_Entries["count"] . "<br>"; } function cmp ($a, $b) { $ProcName = "CLDAP:cmp"; print "$ProcName: IN COMPARE: " . $this->m_Entries["count"] . "<br>"; return strcmp($a["sn"],$b["sn"]); } } Now, with the above (hacked up) example, I create my LDAP object, connect to an LDAP server and retrieve values based on a DN and Filter. Essentially, I get a multi-dimensional array populated with the results from my LDAP filter, with key references to their attributes ("givenname" = first name, "sn" = last name, etc...). This works! I can populate my object property '$this->m_Entries' with my UNSORTED LDAP results. When I run the $LDAP->MySort() routine, '$this->m_Entries' has values BEFORE the usort function call, but has NULL entries AFTER the function call. '$this->cmp' has values each time it is called. Somehow, my data is being wiped out by usort after I return from '$this->cmp'. The above example is attempting to sort my LDAP results by "sn", or last name in LDAP-ese. What is happening here? Why is my array of results disappearing after the usort? I played with globals, and I even saved my array into a temp variable and used that instead. The temp variable is fine before the usort, but is totally gone after. Any help is appreciated! Cheers, Jason

« previous php.general (#38427) next »