php array_map область параметров обратного вызова - PullRequest
9 голосов
/ 31 марта 2011

В следующем коде функция обратного вызова, переданная в wrap_map, не может видеть аргумент во внешней функции, почему?(подробности см. в кодовом комментарии)

public static function wrap_implode($ar, $wrap, $delim){
  echo "wrap is $wrap"; //wrap is ok
  $res = array_map(function($val){
     echo "wrap is $wrap"; //wrap is not set here!
     return $wrap. $val . $wrap;
   }, $ar);

   return implode($delim, $res);
}

1 Ответ

22 голосов
/ 01 апреля 2011

Потому что это в другой сфере. Если вы хотите использовать $wrap, попробуйте:

function($val) use ($wrap){
   //etc
}

Конечно, ваша функция здесь не нуждается в обратном вызове:

return $wrap.implode($wrap.$delim.$wrap,$ar).$wrap;
...