Using usort in php with a class private function

In this example I am sorting by a field inside the array called AverageVote.

You could include the method inside the call, which means you no longer have the class scope problem, like this...

        usort($firstArray, function ($a, $b) {
           if ($a['AverageVote'] == $b['AverageVote']) {
               return 0;
           }

           return ($a['AverageVote'] < $b['AverageVote']) ? -1 : 1;
        });

Make your sort function static:

private static function merchantSort($a,$b) {
       return ...// the sort
}

And use an array for the second parameter:

$array = $this->someThingThatReturnAnArray();
usort($array, array('ClassName','merchantSort'));

  1. open the manual page http://www.php.net/usort
  2. see that the type for $value_compare_func is callable
  3. click on the linked keyword to reach http://php.net/manual/en/language.types.callable.php
  4. see that the syntax is array($this, 'merchantSort')

You need to pass $this e.g.: usort( $myArray, array( $this, 'mySort' ) );

Full example:

class SimpleClass
{                       
    function getArray( $a ) {       
        usort( $a, array( $this, 'nameSort' ) ); // pass $this for scope
        return $a;
    }                 

    private function nameSort( $a, $b )
    {
        return strcmp( $a, $b );
    }              

}

$a = ['c','a','b']; 
$sc = new SimpleClass();
print_r( $sc->getArray( $a ) );