Думаю, этот вопрос заслуживает обновления. Я знаю, что первоначальный вопрос касался PHP версии 5.2, но я пришел сюда в поисках решения и нашел решение для более новых версий PHP и подумал, что это может быть полезно и для других людей.
Для PHP 5.3 и выше вы можете использовать ключевое слово ' use ', чтобы ввести локальные переменные в локальную область действия анонимной функции. Поэтому должно работать следующее:
function sort_by_term_meta(&$terms, $meta) {
usort($terms, function($a, $b) use ($meta) {
$name_a = get_term_meta($a->term_id, 'artist_lastname', true);
$name_b = get_term_meta($b->term_id, 'artist_lastname', true);
return strcmp($name_a, $name_b);
});
}
Еще немного общего кода
Если вы хотите отсортировать массив только один раз и вам нужен дополнительный аргумент, вы можете использовать анонимную функцию, подобную этой:
usort($arrayToSort, function($a, $b) use ($myExtraArgument) {
//$myExtraArgument is available in this scope
//perform sorting, return -1, 0, 1
return strcmp($a, $b);
});
Если вам нужна многократно используемая функция для сортировки массива, который нуждается в дополнительном аргументе, вы всегда можете обернуть анонимную функцию, как в исходном вопросе:
function mySortFunction(&$arrayToSort, $myExtraArgument1, $myExtraArgument2) {
usort($arrayToSort, function($a, $b) use ($myExtraArgument1, $myExtraArgument2) {
//$myExtraArgument1 and 2 are available in this scope
//perform sorting, return -1, 0, 1
return strcmp($a, $b);
});
}