Files
php-doc-ru/reference/array/functions/array-map.xml
Andrey Gromov 8fea8ade31 63 files updated
git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@340063 c90b9560-bf6c-de11-be94-00142212c4b1
2016-09-21 08:37:25 +00:00

374 lines
9.0 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 9caf16a8ba22366befab30e1d4d5759a4cd406f3 Maintainer: shein Status: ready -->
<!-- Reviewed: yes -->
<!-- $Revision$ -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.array-map">
<refnamediv>
<refname>array_map</refname>
<refpurpose>Применяет callback-функцию ко всем элементам указанных массивов</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>array1</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter>...</parameter></methodparam>
</methodsynopsis>
<para>
Функция <function>array_map</function> возвращает массив, содержащий
элементы <parameter>array1</parameter> после их обработки
<parameter>callback</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>
Callback-функция, применяемая к каждому элементу в каждом массиве.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>array1</parameter></term>
<listitem>
<para>
Массив, к которому применяется <parameter>callback</parameter>-функция.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>...</parameter></term>
<listitem>
<para>
Дополнительные массивы для обработки
<parameter>callback</parameter>-функцией.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает массив, содержащий все элементы <parameter>array1</parameter>
после применения <parameter>callback</parameter>-функции к каждому из них.
</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 = array(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> вместе с lambda-функцией (начиная с версии 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("Число $n по-испански - $m");
}
function map_Spanish($n, $m)
{
return(array($n => $m));
}
$a = array(1, 2, 3, 4, 5);
$b = array("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[
// вывод $c
Array
(
[0] => Число 1 по-испански - uno
[1] => Число 2 по-испански - dos
[2] => Число 3 по-испански - tres
[3] => Число 4 по-испански - cuatro
[4] => Число 5 по-испански - cinco
)
// вывод $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>
Обычно при обработке двух или более массивов, они имеют одинаковую длину,
так как callback-функция применяется параллельно к соответствующим
элементам массивов. Если массивы имеют различную длину, более короткие
из них дополняется элементами с пустыми значениями до длины самого длинного массива.
</para>
<para>
Интересным эффектом при использовании этой функции является создание
массива массивов, что может быть достигнуто путем использования
значения &null; в качестве имени callback-функции.
</para>
<para>
<example>
<title>Создание массива массивов</title>
<programlisting role="php">
<![CDATA[
<?php
$a = array(1, 2, 3, 4, 5);
$b = array("one", "two", "three", "four", "five");
$c = array("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>
Если массив-аргумент содержит строковые ключи, то результирующий
массив будет содержать строковые ключи тогда и только тогда, если
передан ровно один массив. Если передано больше одного аргумента,
то результирующий массив будет всегда содержать числовые ключи.
</para>
<para>
<example>
<title>Использование <function>array_map</function> со строковыми ключами</title>
<programlisting role="php">
<![CDATA[
<?php
$arr = array("stringkey" => "value");
function cb1($a) {
return array ($a);
}
function cb2($a, $b) {
return array ($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>
<member>&seealso.callback;</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
-->