PHP中的array_map函数如何返回结果?

4

我对PHP还比较陌生,但是我理解一旦函数中的 return 被执行,程序就会退出该函数并返回到调用该函数的位置。

我对下面这个函数中为什么 array_map()return 开始,并且函数内部还有另一个 return 感到困惑。

function array_plucked($toPluck, $arr) {
return array_map(function($item) use($toPluck) {
    return $item[$toPluck];
}, $arr); }

此外,每次循环遍历数组时,$item[$toPluck]具体发生了什么?结果被存储在哪里?
1个回答

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()函数将一个函数(或“可调用”)作为第一个参数,并将数组作为第二个参数。该函数针对数组中的每个元素运行,然后array_map()将该函数的返回值添加到array_map()返回的新数组中。这被称为一个匿名函数
function ($item) use ($key) {
    return $item[$key];
}

这就像任何其他函数一样,除了它没有名称,而且它有use (...)语法。 use ($key)表示从外部函数(array_pluck()) "导入"$key,以便在此匿名函数内使用。在上面的示例中,$testArray的每个元素都作为$item传递给此匿名函数。当发生return $item[$key]时,只有匿名函数返回(退出),而array_map()继续到下一个元素。


2
不错的回答,但是:“然后array_map()用该函数的返回值替换原始元素,在新数组中返回array_map()” - 不清楚是替换原始数组还是创建一个新数组。我会写成这样:“然后array_map()将该函数的返回值添加到array_map()返回的新数组中”。 - Paul Spiegel
谢谢!我使用了你的编辑。那听起来清晰多了。 - Will
没问题 @programming2music,很高兴能帮助!如果您的问题已经完全得到回答,请勾选答案旁边的复选框来接受它。 - Will

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接