gpt4 book ai didi

php - 'function' 和 'use' 以及 'array_filter' 在 PHP 中如何工作?

转载 作者:可可西里 更新时间:2023-11-01 12:52:23 29 4
gpt4 key购买 nike

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

function my_little_function($parm1,$parm2) {
if ($parms < $parm2) {
return "yes";
} else {
return "no";
}
}

然后这样调用它:

$result = my_little_function("1","2");
echo "The answer is $result." . "\n";

我有一些代码,不是我写的,它在像上面的 my_little_function 这样的函数的传统用法中同时使用了“function”和“use”。

我对此感到困惑,并向您这些更有经验的 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;});

$e 未在函数的任何部分或程序的其余部分设置,那么使用 $e 的目的是什么?它如何传递一个值以及如何使用它?这个函数似乎没有名字,所以我不知道它是如何被调用的,它是如何完成的?

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

我自己也没有使用过“使用”,所以这对我来说很陌生。我在 php.net 上查找它,它看起来像是一种为某物赋值的方法,但我找不到任何实际示例来说明为什么需要它以及何时应该使用它。

我查找了 array_filter,它说它是“使用回调函数过滤数组的元素”。我不知道回调函数是什么。它指的是 function($e) 吗?

$neededObject 的上述 PHP 代码行是否应该采用不同的格式以便于阅读?

最佳答案

让我们使用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;
}

Online demo

但是如果你只想使用这个函数一次怎么办?从 PHP 5.3 开始,有一个叫做 anonymous functions 的东西。 ,我们像下面这样使用它:

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

$new_array = array_map(function($string){
return $string.$string;
}, $array);
print_r($new_array);

Online demo

现在,假设您想从另一个变量中添加一个标准值。使用全局变量很容易。但正如我们所知,全局变量是邪恶的,应该避免。我们可以使用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);

Online demo

如果我们在循环时使用引用写入外部变量,

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;

Online demo

关于php - 'function' 和 'use' 以及 'array_filter' 在 PHP 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18182997/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com