Я пытаюсь создать простую функцию для сортировки массива с помощью usort, и я не понимаю, что не так с моим кодом.
Для теста я хочу упорядочить по полю 'str' в«нисходящий» порядок.
Мой массив для теста:
$tabCustom = array(
0 => array(
'str' => 'cccc',
'nb' => 1
),
1 => array(
'str' => 'aaaa',
'nb' => 3
),
2 => array(
'str' => 'bbb',
'nb' => 2
)
);
Вот код, который хорошо работает без пользовательской функции:
usort($tabCustom, function($a, $b)
{
$order = 'desc';
if($order == 'asc')
{
return strcasecmp($a['str'], $b['str']);
}
elseif($order == 'desc')
{
return strcasecmp($b['str'], $a['str']);
}
});
Результат:
Array
(
[0] => Array
(
[str] => cccc
[nb] => 1
)
[1] => Array
(
[str] => bbb
[nb] => 2
)
[2] => Array
(
[str] => aaaa
[nb] => 3
)
)
А теперь я пытаюсь создать пользовательскую функцию на основе того же кода:
function arraySort($array, $field, $order = 'asc')
{
usort($array, function($a, $b)
{
global $field;
global $order;
if($order == 'asc')
{
return strcasecmp($a[$field], $b[$field]);
}
elseif($order == 'desc')
{
return strcasecmp($b[$field], $a[$field]);
}
});
}
arraySort($tabCustom, 'str', 'desc');
Неправильный результат:
Array
(
[0] => Array
(
[str] => cccc
[nb] => 1
)
[1] => Array
(
[str] => bbb
[nb] => 2
)
[2] => Array
(
[str] => aaaa
[nb] => 3
)
)
Так что я не понимаючто не так, я поставил переменную global для $ field и $ order , потому что в противном случае код говорит Undefined variable
, но сортировка моей таблицы не работает.
У вас есть представление о проблеме?
Спасибо:)