将Javascript函数转换为PHP函数

Joe*_*her 8 javascript php

我是PHP的新手,我正在尝试将简单的Javascript函数转换为PHP函数.到目前为止,我知道只转换变量,我需要帮助sort函数和数组过滤器.谢谢你的帮助!

var closeRoll = function( number ) {
  var rollArray = [36, 48, 60, 72];
  var closest = rollArray.filter(function(ele){
    return ele - number >= 0
  }).sort()[0];
  return closest;   
};
Run Code Online (Sandbox Code Playgroud)

我的半转换:

function closeRoll( $number ) { 
  $rollArray = Array(36, 48, 60, 72);
  $closest = array_filter( $rollArray, function temp( $rollArray ) {
    return $rollArray - $number >= 0;
  }); //.sort()[0];
  return $closest;   
};
Run Code Online (Sandbox Code Playgroud)

Kat*_*ato 3

作用域的工作方式与 JavaScript 不太一样;您不能简单地在$number回调函数内部引用,因为它没有作用域链。

您要么必须将其设为全局(不推荐但简单):

<?php
function doFilter($element) { // this could still be anonymous, but doesn't have to be
   return $element - $GLOBALS['number'] >= 0;
}

function closeRoll( $number ) { 
   $GLOBALS['number'] = $number;
   $rollArray = Array(36, 48, 60, 72);
   $closest = array_filter( $rollArray, 'doFilter' );
   return $closest;   
};
?>
Run Code Online (Sandbox Code Playgroud)

或者您可以使用use运算符(一个优雅的解决方案):

<?php

function closeRoll( $number ) { 
   $rollArray = Array(36, 48, 60, 72);
   $closest = array_filter( $rollArray, function( $element ) use ($number) {
     return $element - $number >= 0;
   });
   return $closest;   
};

?>
Run Code Online (Sandbox Code Playgroud)