So there I was, trying to sort object internal data with a user-defined function and going nowhere, until it hit me: I could simply promote the data to the global scope using $GLOBALS and then import it inside the function. It even works for lambda-style functions created with create_function:
$GLOBALS['gOPMLData'] = $this->m_aData; // promote internal data to global scope
foreach( $this->m_aLetters as $szLetter => $aKeys ) {
usort( $aKeys, create_function('$a,$b','
global $gOPMLData;
$a = strtolower($gOPMLData[$a]["TITLE"]);
$b = strtolower($gOPMLData[$b]["TITLE"]);
if( $a == $b )
return 0;
return ( $a < $b ) ? -1 : 1;' ));
$this->m_aLetters[$szLetter] = $aKeys;
}
unset( $GLOBALS['gOPMLData'] ); // clean up global scope
The reason I ended up doing this is that trying to pass a member function to usort (usort($aFoo,'$this->mysort')) doesn't work in the current builds of PHP. The lambda function is just to make things more compact (and not having to look for a stray function when changing the class behaviour).