PHP: usort почему не видит переменную вне пользовательской функции и как исправить?

Здравствуйте!

Есть код и оно не работает, причина ясна функция в usort тупо не видит переменные $property,$direction:
Я потратил много времени пытаясь понять что тут происходит. Вопросы:

1) Почему функция не видит переменные(я даже их поставил в аргументы)
2) Как выйти из такого положения

$marray = array(
      0 => array(
              'title' =>'aaaa',
              'value' => 'bbbb'),
     1 => array(
              'title' =>'cccc',
              'value' => 'vvvv'),
     2 => array(
              'title' =>'bbbb',
              'value' => 'yyyy'),
);

$property = 'title';
$direction = 'desc';

usort($marray,function($a,$b,$property,$direction){
    $temp = strcmp($a[$property], $b[$property]);
    if($direction == "desc")return $temp > 0 ? 1 : -1;
    return $temp < 0 ? -1 : 1;
});
  • Вопрос задан
  • 594 просмотра
Решения вопроса 1
vollossy
@vollossy
Веб-разработчик с небольшим опытом работы
Вместо передачи переменных $property, $direction в виде параметров используйте ключевое слово use: function ($a, $b) use ($property, $direction) {}.
А чтобы понять, почему не код не работал, почитайте про замыкания и области видимости в php
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽