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");