mirror of
https://github.com/php/doc-zh.git
synced 2026-03-24 07:02:15 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/zh/trunk@351324 c90b9560-bf6c-de11-be94-00142212c4b1
398 lines
8.4 KiB
XML
Executable File
398 lines
8.4 KiB
XML
Executable File
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- $Revision$ -->
|
||
<!-- $Author$ -->
|
||
<!-- EN-Revision: 9e0f03ac354d797d1d16c0fcc1663e5e170f2727 Maintainer: daijie Status: ready -->
|
||
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.array-map">
|
||
<refnamediv>
|
||
<refname>array_map</refname>
|
||
<refpurpose>
|
||
为数组的每个元素应用回调函数
|
||
</refpurpose>
|
||
</refnamediv>
|
||
<refsect1 role="description">
|
||
&reftitle.description;
|
||
<methodsynopsis>
|
||
<type>array</type><methodname>array_map</methodname>
|
||
<methodparam><type>callable</type><parameter>callback</parameter></methodparam>
|
||
<methodparam><type>array</type><parameter>array</parameter></methodparam>
|
||
<methodparam rep="repeat"><type>array</type><parameter>arrays</parameter></methodparam>
|
||
</methodsynopsis>
|
||
<para>
|
||
<function>array_map</function>:返回数组,是为 <parameter>array</parameter> 每个元素应用 <parameter>callback</parameter>函数之后的数组。
|
||
<function>array_map</function> 返回一个 &array;,数组内容为 <parameter>array1</parameter> 的元素按索引顺序为参数调用 <parameter>callback</parameter> 后的结果(有更多数组时,还会传入 <parameter>arrays</parameter> 的元素)。
|
||
<parameter>callback</parameter> 函数形参的数量必须匹配 <function>array_map</function> 实参中数组的数量。
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="parameters">
|
||
&reftitle.parameters;
|
||
<para>
|
||
<variablelist>
|
||
<varlistentry>
|
||
<term><parameter>callback</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
回调函数 <type>callable</type>,应用到每个数组里的每个元素。
|
||
</para>
|
||
<para>
|
||
多个数组操作合并时,<parameter>callback</parameter> 可以设置为 &null;。
|
||
如果只提供了 <parameter>array</parameter> 一个数组,
|
||
<methodname>array_map</methodname> 会返回输入的数组。
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><parameter>array</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
数组,遍历运行 <parameter>callback</parameter> 函数。
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><parameter>arrays</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
额外的数组列表,每个都遍历运行 <parameter>callback</parameter> 函数。
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="returnvalues">
|
||
&reftitle.returnvalues;
|
||
<para>
|
||
返回数组,包含 <parameter>callback</parameter> 函数处理之后 <parameter>array</parameter> (有多个数组时,为 <parameter>arrays</parameter>) 对应索引所有元素作为函数的参数。
|
||
</para>
|
||
<para>
|
||
当仅仅传入一个数组时,返回的数组会保留传入参数的键(key)。
|
||
传入多个数组时,返回的数组键是按顺序的 integer。
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="examples">
|
||
&reftitle.examples;
|
||
<para>
|
||
<example>
|
||
<title><function>array_map</function> 例子</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
function cube($n)
|
||
{
|
||
return ($n * $n * $n);
|
||
}
|
||
|
||
$a = [1, 2, 3, 4, 5];
|
||
$b = array_map('cube', $a);
|
||
print_r($b);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
<para>
|
||
这使得 <varname>$b</varname> 成为:
|
||
</para>
|
||
<screen>
|
||
<![CDATA[
|
||
Array
|
||
(
|
||
[0] => 1
|
||
[1] => 8
|
||
[2] => 27
|
||
[3] => 64
|
||
[4] => 125
|
||
)
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title><function>array_map</function> 使用匿名函数 (PHP 5.3.0 起)</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$func = function($value) {
|
||
return $value * 2;
|
||
};
|
||
|
||
print_r(array_map($func, range(1, 5)));
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
<screen>
|
||
<![CDATA[
|
||
Array
|
||
(
|
||
[0] => 2
|
||
[1] => 4
|
||
[2] => 6
|
||
[3] => 8
|
||
[4] => 10
|
||
)
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title><function>array_map</function>:使用更多的数组</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
function show_Spanish($n, $m)
|
||
{
|
||
return "The number {$n} is called {$m} in Spanish";
|
||
}
|
||
|
||
function map_Spanish($n, $m)
|
||
{
|
||
return [$n => $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);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
// printout of $c
|
||
Array
|
||
(
|
||
[0] => 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
|
||
)
|
||
|
||
// printout of $d
|
||
Array
|
||
(
|
||
[0] => Array
|
||
(
|
||
[1] => uno
|
||
)
|
||
|
||
[1] => Array
|
||
(
|
||
[2] => dos
|
||
)
|
||
|
||
[2] => Array
|
||
(
|
||
[3] => tres
|
||
)
|
||
|
||
[3] => Array
|
||
(
|
||
[4] => cuatro
|
||
)
|
||
|
||
[4] => Array
|
||
(
|
||
[5] => cinco
|
||
)
|
||
|
||
)
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
传入两个及以上的数组时,它们元素数量将会相同。因为回调函数会并行地处理相互对应的元素。
|
||
如果几个数组的元素数量不一致:空元素会扩展短那个数组,直到长度和最长的数组一样。
|
||
</para>
|
||
<para>
|
||
此函数有个有趣的用法:传入 &null; 作为回调函数的名称,将创建多维数组(一个数组,内部包含数组。)
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title>多个数组的合并操作</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$a = [1, 2, 3, 4, 5];
|
||
$b = ['one', 'two', 'three', 'four', 'five'];
|
||
$c = ['uno', 'dos', 'tres', 'cuatro', 'cinco'];
|
||
|
||
$d = array_map(null, $a, $b, $c);
|
||
print_r($d);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
Array
|
||
(
|
||
[0] => 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
|
||
)
|
||
|
||
)
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</para>
|
||
|
||
<para>
|
||
<example>
|
||
<title>
|
||
仅有 <parameter>array1</parameter> 时,<parameter>callback</parameter> 设置为 &null;
|
||
</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$array = [1, 2, 3];
|
||
var_dump(array_map(null, $array));
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
array(3) {
|
||
[0]=>
|
||
int(1)
|
||
[1]=>
|
||
int(2)
|
||
[2]=>
|
||
int(3)
|
||
}
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title><function>array_map</function> 键(key)是 string</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$arr = array("stringkey" => "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));
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
array(1) {
|
||
["stringkey"]=>
|
||
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"
|
||
}
|
||
}
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="seealso">
|
||
&reftitle.seealso;
|
||
<para>
|
||
<simplelist>
|
||
<member><function>array_filter</function></member>
|
||
<member><function>array_reduce</function></member>
|
||
<member><function>array_walk</function></member>
|
||
</simplelist>
|
||
</para>
|
||
</refsect1>
|
||
</refentry>
|
||
|
||
<!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|