'function'和'use'以及'array_filter'如何在PHP中运行?

Edw*_*ard 7 php function array-filter

我熟悉在.php文件顶部创建一个PHP函数,例如:

function my_little_function($parm1,$parm2) {
   if ($parms < $parm2) {
   return "yes";
   } else {
   return "no";
   }
}
Run Code Online (Sandbox Code Playgroud)

然后像这样称呼它:

$result = my_little_function("1","2");
echo "The answer is $result." . "\n";
Run Code Online (Sandbox Code Playgroud)

我有一些代码,我没有写它,它使用"函数"和"使用"在传统使用上面的函数my_little_function.

我对此感到困惑,并为您更有经验的PHP开发人员提出一些问题.以下是我所指的工作PHP代码的一部分:

$neededObject = array_filter($st_ny_trip->STOPS->STOP,function($e) use ($final_desired_dest,$connect_raw){return $e->NAME == $final_desired_dest && DateTime::createFromFormat("m/d/Y g:i:s a", $e->TIME) > $connect_raw;});
Run Code Online (Sandbox Code Playgroud)

$e没有设置在函数的任何部分或程序的其余部分,那么使用$e什么?它是如何传递一个值的,它是如何被使用的?似乎没有此功能的名称,所以我不知道它是如何被调用的,这是怎么做的?

这是否会创建一个即时使用的函数,并且每次调用此代码时都会重新生成它?如果它是一个函数,为什么不在这个函数之外创建它并调用它?

我自己也没有使用'使用',所以这对我来说并不熟悉.我在php.net上查了一下,它看起来像是一种为某些东西分配值的方法,但我找不到任何实际的例子来证明为什么需要它以及什么时候应该使用它.

我抬起头来array_filter说它是"使用回调函数过滤数组的元素".我不知道回叫功能是什么.它指的是function($e)什么?

上面的PHP代码行是否应该以$neededObject不同的格式进行格式化以便于阅读?

Ham*_*mZa 6

让我们array_map()用来解释发生了什么.

我们想要复制数组的输入:所以如果输入是aa,输出就是aaaa.

所以通常的方法是创建一个函数,然后将其传递给array_map():

$array = range('a', 'e');

$new_array = array_map('duplicate', $array);
print_r($new_array);

function duplicate($string){
    return $string.$string;
}
Run Code Online (Sandbox Code Playgroud)

在线演示

但是如果你只想使用这个功能一次呢?从PHP 5.3开始,有一种称为匿名函数的东西,我们使用它如下:

$array = range('a', 'e');

$new_array = array_map(function($string){
    return $string.$string;
}, $array);
print_r($new_array);
Run Code Online (Sandbox Code Playgroud)

在线演示

现在,让我们假设您想要从另一个变量添加标准值.全局变量很容易.但正如我们所知,全球变量是邪恶的,应该避免.我们可以使用use():

$array = range('a', 'e');
$standard_value = ',';

$new_array = array_map(function($string)use($standard_value){
        // $standard_value becomes available inside the function
    return $string.$standard_value.$string;
}, $array);
print_r($new_array);
Run Code Online (Sandbox Code Playgroud)

在线演示

use() 如果我们在循环时使用引用写入外部变量,则可以变得有用:

$array = range('a', 'e');
$another_string = '';

$new_array = array_map(function($string)use(&$another_string){// note &
    $another_string .= $string.$string; // overwrite $another_string
    return $string.$string;
}, $array);
print_r($new_array);
echo PHP_EOL . $another_string;
Run Code Online (Sandbox Code Playgroud)

在线演示