Обновленный ответ по полному коду
Первая проблема заключается в том, что вы возвращаете результат uasort()
:
function sort_sizes($sizes)
{
return uasort($sizes, array($this, 'cmp'));
}
Это неправильно, потому что uasort()
не возвращает отсортированный массив. Он изменяет ту же переменную, которую вы передаете в качестве параметра, и возвращает логическое значение. Вот почему вы видите 1
как вывод.
Заставить метод принять $sizes
по ссылке:
function sort_sizes(array &$sizes)
{
uasort($sizes, array($this, 'cmp'));
}
Тогда назовите это так:
print_r($sizes);
$sorted_sizes = array_unique($sizes);
$this->sort_sizes($sorted_sizes);
print_r($sorted_sizes);
Вот ваш cmp()
метод с добавленной поддержкой сортировки без учета регистра:
function cmp($a, $b)
{
$sizes = array('small' => 0, 'medium' => 1, 'large' => 2, 'xl' => 3, 'xxl' => 4);
return $sizes[strtolower($a)] - $sizes[strtolower($b)];
}
Старый ответ
Попробуй это. Вместо этого используйте uasort()
, если вы хотите поддерживать пары ключ-значение :
function sort_sizes($a, $b) {
// Map the sizes to an ordered sequence of ints
static $sizes = array('small' => 0, 'medium' => 1, 'large' => 2, 'xl' => 3, 'xxl' => 4);
// Find the difference, using the sizes as keys to the above array
return $sizes[strtolower($a)] - $sizes[strtolower($b)];
}
$arr = array('Small', 'XXL', 'Medium', 'Large', 'XL');
print_r($arr); // Before sorting
uasort($arr, 'sort_sizes');
print_r($arr); // After sorting
Выход:
Array
(
[0] => Small
[1] => XXL
[2] => Medium
[3] => Large
[4] => XL
)
Array
(
[0] => Small
[2] => Medium
[3] => Large
[4] => XL
[1] => XXL
)