PHP usort не сортирует класс
Это образец массива элементов для сортировки:
$items =
array
0 =>
object(stdClass)[8]
public 'id' => string '110' (length=3)
public 'brand_id' => string '18' (length=2)
array
0 => string ' OT-708' (length=7)
public 'failed' => null
public 'diff' => null
1 =>
object(stdClass)[9]
public 'id' => string '161' (length=3)
public 'brand_id' => string '18' (length=2)
Итак, скажем, я хочу сортировать по brand_id
.
Это моя функция обратного вызова usort:
function _compare($itemA, $itemB){
if ($itemA->brand_id == $itemB->brand_id) {
return 0;
}
else{
return strcmp($itemA->brand_id, $itemB->brand_id); //just an example...
}
}
И когда я делаю usort($items, '_compare'); var_dump($items);
, ничего не происходит. Любые подсказки по устранению неполадок?
- ОБНОВЛЕНИЕ -
Хорошо, я упростил проблему:
function cmp($itemA, $itemB){
return -1;
}
if (usort($items, "cmp"))
echo 'I just sorted!';
else echo 'Cant sort!';
Он всегда печатает " Cant sort! '
Ответы
Ответ 1
Наконец, я обнаружил источник этой ошибки. Проблема заключалась в том, что этот код находился внутри класса.
Если это ваше дело, тогда вы должны вызвать usort следующим образом:
usort($items, array("MyClass", "compare_method"));
Кроме того, если ваш класс находится в пространстве имен, вы должны указать полное пространство имен в usort.
usort($items, array('Full\Namespace\WebPageInformation', 'compare_method'));
Ответ 2
Кроме того, вы можете установить статическую функцию внутри своего класса:
static myfunction($a, $b){'yoursort'}
и назовите его следующим образом:
usort($items, "Class::myfunction");