我对PHP很新,但是我理解一旦PHP在函数中命中return
,它就会退出函数并返回到它被调用的位置。
我很担心array_map()
下面的函数中的return
如何或为什么以function array_plucked($toPluck, $arr) {
return array_map(function($item) use($toPluck) {
return $item[$toPluck];
}, $arr); }
开头,并且在函数内部有另一个函数。
$item[$toPluck]
每次在数组中循环时,|
究竟发生了什么,结果存储在哪里?
答案 0 :(得分:5)
好问题!好的,让我们清理一下:
function array_pluck($key, $array)
{
return array_map(function ($item) use ($key) {
return $item[$key];
}, $array);
}
这种方式更容易理解。
首先,此函数的目标是从多维数组返回特定键值的一维数组。以下是示例:
$testArray = array(
array("xxx" => "hello", "yyy" => "goodbye"),
array("xxx" => "hi", "yyy" => "bye"),
array("xxx" => "hey", "yyy" => "peace"),
);
php > var_dump(array_pluck('xxx', $testArray));
array(3) {
[0]=>
string(5) "hello"
[1]=>
string(2) "hi"
[2]=>
string(3) "hey"
}
php > var_dump(array_pluck('yyy', $testArray));
array(3) {
[0]=>
string(7) "goodbye"
[1]=>
string(3) "bye"
[2]=>
string(5) "peace"
}
php >
如您所见,对于父数组中的每个数组,这将分别返回$testArray[<index>]['xxx']
和$testArray[<index>]['yyy']
。
现在解释return
发生了什么。 array_map()
函数将函数(或“Callable”)作为第一个参数,将数组作为第二个参数。该函数针对数组中的每个元素运行,然后array_map()
将该函数的返回值添加到array_map()
返回的新数组中。
function ($item) use ($key) {
return $item[$key];
}
它与任何其他函数一样,除了它没有名称,并且它具有use (...)
语法。 use ($key)
表示从外部函数($key
)“导入”array_pluck()
,因此可以在此匿名函数中使用它。上例中的$testArray
的每个元素都将作为$item
传递给此匿名函数。当return $item[$key]
发生时,只有匿名函数返回(退出),array_map()
继续到下一个元素。