PHP interesse |
|
Ik heb een array met Categorie objecten. Deze objecten hebben de functie Compare( $x )
Compare retourneerd dus of het object $x ( ook een Categorie ) alfpabetisch eerder of later komt.
Nu wil ik deze array gaan sorteren, maar hoe moet ik dat doen ? om met usort een apparte functie aan te ropen vind ik nou ook niet iets.
Ik heb er aan gedacht om een globale functie te maken die de objecten checked of ze Comparable implimenten en dan checken, maar liever doe ik gewoon een referentie naar het object zelf.
Weet iemand of dat kan en hoe ? ;-)
EDIT: ik heb het zo opgelost :
/**
* Sorts the array by its object's names
* @param Object[] $array Array by reference
*/
function array_object_sort( &$array ) {
function array_object_sort_inner( Items $x, Items $y ) {
return $x->CompareTo( $y );
}
uasort( &$array, "array_object_sort_inner" );
}
/** * Sorts the array by its object's names * @param Object[] $array Array by reference */ function array_object_sort( &$array ) { function array_object_sort_inner( Items $x, Items $y ) { return $x->CompareTo( $y ); } uasort( &$array, "array_object_sort_inner" ); }
/**
* Check if object name is the same, "smaller" or "bigger"
* @param Object $x Object that also impliments iComparable
* @param Boolean $sameObjectType When set to true, the object must be the same type. Default: false
* @return -1: Smaller, 0: Same, +1: Bigger
*/
public function CompareTo( Items $x, $sameObjectType = false ) {
// Check if class type is the same
$class = get_class( $this );
if ( ( $sameObjectType === true ) && !( $x instanceof $class ) ) {
throw new DTOGeneral( DTOGeneral::NotInstanceOf );
}
// Compare and return
return strcasecmp( $this->_name, $x->GetName() );
}
/** * Check if object name is the same, "smaller" or "bigger" * @param Object $x Object that also impliments iComparable * @param Boolean $sameObjectType When set to true, the object must be the same type. Default: false * @return -1: Smaller, 0: Same, +1: Bigger */ public function CompareTo( Items $x, $sameObjectType = false ) { // Check if class type is the same if ( ( $sameObjectType === true ) && !( $x instanceof $class ) ) { throw new DTOGeneral( DTOGeneral::NotInstanceOf ); } // Compare and return }
|