array_map 为数组的每个元素应用回调函数 &reftitle.description; arrayarray_map callablenullcallback arrayarray arrayarrays array_map 返回一个 &array;,包含将 array 的相应值作为回调的参数顺序调用 callback 后的结果(如果提供了更多数组,还会利用 arrays 传入)。callback 函数形参的数量必须匹配 array_map 实参中数组的数量。多余的实参数组将会被忽略。如果提供的实参数组的数量不足,将抛出 ArgumentCountError &reftitle.parameters; callback 回调函数 callable,应用到每个数组里的每个元素。 多个数组操作合并时,callback 可以设置为 &null;, 并且会返回一个数组,该数组的每个元素都是一个包含相同索引的输入数组元素的数组(见下面的示例)。 如果只提供了 array 一个数组, array_map 会返回输入的数组。 array 数组,遍历运行 callback 函数。 arrays 额外的数组列表,每个都遍历运行 callback 函数。 &reftitle.returnvalues; 返回数组,包含将 array 的相应值作为回调的参数调用 callback 函数后的结果(如果提供了更多数组,还会利用 arrays 传入)。 当仅仅传入一个数组时,返回的数组会保留传入参数的键(key)。 传入多个数组时,返回的数组键是按顺序的 integer。 &reftitle.changelog; &Version; &Description; &array.changelog.by-ref; &reftitle.examples; <function>array_map</function> 例子 ]]> 这使得 $b 成为: 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125 ) ]]> <function>array_map</function> 使用匿名函数 $value * 2, range(1, 5))); ?> ]]> 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 ) ]]> <function>array_map</function>:使用更多的数组 $m]; } $a = [1, 2, 3, 4, 5]; $b = ['uno', 'dos', 'tres', 'cuatro', 'cinco']; $c = array_map('show_Spanish', $a, $b); print_r($c); $d = array_map('map_Spanish', $a , $b); print_r($d); ?> ]]> &example.outputs; The number 1 is called uno in Spanish [1] => The number 2 is called dos in Spanish [2] => The number 3 is called tres in Spanish [3] => The number 4 is called cuatro in Spanish [4] => The number 5 is called cinco in Spanish ) // 打印 $d Array ( [0] => Array ( [1] => uno ) [1] => Array ( [2] => dos ) [2] => Array ( [3] => tres ) [3] => Array ( [4] => cuatro ) [4] => Array ( [5] => cinco ) ) ]]> 传入两个及以上的数组时,它们元素数量将会相同。因为回调函数会并行地处理相互对应的元素。 如果几个数组的元素数量不一致:空元素会扩展短那个数组,直到长度和最长的数组一样。 此函数有个有趣的用法:传入 &null; 作为回调函数的名称,将创建多维数组(一个数组,内部包含数组。) 多个数组的合并操作 ]]> &example.outputs; Array ( [0] => 1 [1] => one [2] => uno ) [1] => Array ( [0] => 2 [1] => two [2] => dos ) [2] => Array ( [0] => 3 [1] => three [2] => tres ) [3] => Array ( [0] => 4 [1] => four [2] => cuatro ) [4] => Array ( [0] => 5 [1] => five [2] => cinco ) ) ]]> 仅有 <parameter>array1</parameter> 时,<parameter>callback</parameter> 设置为 &null; ]]> &example.outputs; int(1) [1]=> int(2) [2]=> int(3) } ]]> <function>array_map</function> 键(key)是 string "value"); function cb1($a) { return [$a]; } function cb2($a, $b) { return [$a, $b]; } var_dump(array_map('cb1', $arr)); var_dump(array_map('cb2', $arr, $arr)); var_dump(array_map(null, $arr)); var_dump(array_map(null, $arr, $arr)); ?> ]]> &example.outputs; array(1) { [0]=> string(5) "value" } } array(1) { [0]=> array(2) { [0]=> string(5) "value" [1]=> string(5) "value" } } array(1) { ["stringkey"]=> string(5) "value" } array(1) { [0]=> array(2) { [0]=> string(5) "value" [1]=> string(5) "value" } } ]]> <function>array_map</function> - 关联数组 虽然 array_map 不能直接支持使用数组的键(key)作为输入,但可以使用 array_keys 进行模拟。 'First release', 'v2' => 'Second release', 'v3' => 'Third release', ]; // 注意: 在 7.4.0 之前,使用较长的语法来代替匿名函数。 $callback = fn(string $k, string $v): string => "$k was the $v"; $result = array_map($callback, array_keys($arr), array_values($arr)); var_dump($result); ?> ]]> &example.outputs; string(24) "v1 was the First release" [1]=> string(25) "v2 was the Second release" [2]=> string(24) "v3 was the Third release" } ]]> &reftitle.seealso; array_filter array_reduce array_walk