![](/img/trans.png)
[英]Why does the array_filter function work only for last directory in a loop in PHP?
[英]How does 'function' and 'use' and 'array_filter' work in PHP?
我熟悉在.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。
我對此感到困惑,並為您更有經驗的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;
}
但是如果你只想使用這個功能一次呢? 從PHP 5.3開始 ,有一種稱為匿名函數的東西,我們使用它如下:
$array = range('a', 'e');
$new_array = array_map(function($string){
return $string.$string;
}, $array);
print_r($new_array);
現在,讓我們假設您想要從另一個變量添加標准值。 全局變量很容易。 但正如我們所知,全球變量是邪惡的,應該避免。 我們可以使用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);
如果我們在循環時使用引用寫入外部變量, 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;
$e
變量充當普通函數參數,因此將由調用函數的代碼傳遞,請參閱使用array_filter
時$e
的值的文檔。
use
語句將變量從本地范圍導入匿名'函數的范圍。
$myvar = 'world';
$myFunc = function ($test) use ($myvar) {
return $test . ' ' . $myvar;
};
echo $myFunc('hello'); // echoes 'hello world';
如果你沒有包含use ($myvar)
部分,那么isset($myvar)
將從匿名函數內部返回false,因為它有一個單獨的作用域。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.