I have a problem with usort not liking the second parameter (the sorting function). I have seen a lot of questions about this being a problem when in a class, and the answer for that is to pass an array of array($this, functionName)
But in my case this is not working. The script is not a class, but I am getting this error:
PHP Warning: usort() expects parameter 2 to be a valid callback, function 'cmp' not found or invalid function name in <filename.php>
So what is the problem with the second parameter, the function name, not being found? This is example code straight from the PHP website.
If the code is not in a class, but you are using a namespace, usort expects the second parameter to have that namespace defined. But not in an array in similar style to using usort in a class.
This worked for me, where 'cmp' is the sorting function:
usort($arrayToSort, 'My\Full\Namespace\cmp');
In case this helps, (&since this is top of Google), I had to do this
class MyObj{
var $Supplier;
function cmp($m, $n) {
if ($m->Supplier == $n->Supplier) {
return 0;
}
return ($m->Supplier < $n->Supplier) ? -1 : 1;
}
}
usort($arrayToSort, array('My\Full\Namespace\MyObj', 'cmp'));
I put the callback function inside the function in which I put the usort() and it worked.
function callerFn() {
if (!function_exists('callbackFn')) {
function callbackFn() {}
}
usort($arrayToSort, "callbackFn");
}
You can also do it as an unnamed function:
function callerFn() {
usort($arrayToSort, function() {} );
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With