Это образец массива элементов для сортировки:
$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);
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! '
Наконец, я обнаружил источник этой ошибки. Проблема заключалась в том, что этот код находился внутри класса.
Если это ваш случай, то вы должны вызвать usort следующим образом:
usort($items, array("MyClass", "compare_method"));
Кроме того, если ваш класс находится в пространстве имен, вы должны указать полное пространство имен в usort.
usort($items, array('Full\Namespace\WebPageInformation', 'compare_method'));
Кроме того, вы можете установить статическую функцию внутри своего класса:
static myfunction($a, $b){'yoursort'}
и назовите его так:
usort($items, "Class::myfunction");