1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 07:42:22 +01:00
Files
archived-doc-ru/reference/array/functions/array-walk.xml

247 lines
8.4 KiB
XML
Raw Permalink 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: 4ca7cdeaee66bff2fefb9df88213ea6fc2e6f3dc Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.array-walk" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>array_walk</refname>
<refpurpose>Применяет пользовательскую функцию к каждому элементу массива</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>true</type><methodname>array_walk</methodname>
<methodparam><type class="union"><type>array</type><type>object</type></type><parameter role="reference">array</parameter></methodparam>
<methodparam><type>callable</type><parameter>callback</parameter></methodparam>
<methodparam choice="opt"><type>mixed</type><parameter>arg</parameter><initializer>&null;</initializer></methodparam>
</methodsynopsis>
<simpara>
Функция применяет пользовательскую <parameter>callback</parameter>-функцию к каждому
элементу массива <parameter>array</parameter>.
</simpara>
<para>
Функция <function>array_walk</function> не зависит от внутреннего
указателя массива <parameter>array</parameter>.
Функция <function>array_walk</function> обойдёт каждый элемент массива
независимо от позиции указателя.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>array</parameter></term>
<listitem>
<para>
Входной массив.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>callback</parameter></term>
<listitem>
<para>
При вызове функции только с двумя аргументами в <parameter>callback</parameter>-функцию
передаётся два аргумента. Первый — значение элемента массива <parameter>array</parameter>,
а второй — ключ или индекс элемента.
</para>
<note>
<para>
Первый параметр <parameter>callback</parameter>-функции
определяют как <link linkend="language.references">ссылку</link>,
чтобы <parameter>callback</parameter>-функция работала не с копией,
а с исходным значением массива, тогда изменения
элементов внутри функции обратного вызова изменят сам исходный массив.
</para>
</note>
<note>
<para>
Многие внутренние функции наподобие <function>strtolower</function>
выбрасывают ошибку, если количество переданных аргументов превышает
количество параметров функции, поэтому такие внутренние
функции нельзя указывать как значение параметра <parameter>callback</parameter>.
</para>
</note>
<para>
Разрешается изменять только значения массива
<parameter>array</parameter>; структуру самого массива изменить
нельзя. Программисту нельзя добавлять, удалять или изменять порядок
элементов. Поведение функции становится неопределённым и непредсказуемым,
если callback-функция не соответствует этому требованию.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>arg</parameter></term>
<listitem>
<para>
Необязательный параметр <parameter>arg</parameter>,
передаётся в <parameter>callback</parameter>-функцию как третий аргумент,
если указали.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.true.always;
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Начиная с PHP 7.1.0 функция выбрасывает исключение <classname>ArgumentCountError</classname>,
если <parameter>callback</parameter>-функция требует больше двух параметров, тогда как передаются
только значение и ключ элемента массива, или больше 3 параметров, если также передаётся
аргумент <parameter>arg</parameter>. Раньше при таких условиях каждый раз, когда функция
<function>array_walk</function> вызывала <parameter>callback</parameter>-функцию,
генерировалась ошибка уровня <link linkend="errorfunc.constants">E_WARNING</link>.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
&return.type.true;
<row>
<entry>8.0.0</entry>
<entry>
Теперь функция выдаёт ошибку уровня <constant>E_WARNING</constant>,
если параметр <parameter>callback</parameter> ожидает,
что значение второго или третьего аргумента передадут по ссылке.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример обработки значений при обходе массива функцией <function>array_walk</function></title>
<programlisting role="php">
<![CDATA[
<?php
$fruits = array("d" => "лимон", "a" => "апельсин", "b" => "банан", "c" => "яблоко");
function test_alter(&$item1, $key, $prefix)
{
$item1 = "$prefix: $item1";
}
function test_print($item2, $key)
{
echo "$key. $item2\n";
}
echo "До:…\n";
array_walk($fruits, 'test_print');
array_walk($fruits, 'test_alter', 'фрукт');
echo "\n…и после:\n";
array_walk($fruits, 'test_print');
?>
]]>
</programlisting>
&example.outputs;
<screen role="php">
<![CDATA[
До:…
d. лимон
a. апельсин
b. банан
c. яблоко
…и после:
d. фрукт: лимон
a. фрукт: апельсин
b. фрукт: банан
c. фрукт: яблоко
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Пример использования функции <function>array_walk</function> с анонимной функцией</title>
<programlisting role="php">
<![CDATA[
<?php
$elements = ['a', 'b', 'c'];
array_walk($elements, function ($value, $key) {
echo "{$key} => {$value}\n";
});
?>
]]>
</programlisting>
&example.outputs;
<screen role="php">
<![CDATA[
0 => a
1 => b
2 => c
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>array_walk_recursive</function></member>
<member><function>iterator_apply</function></member>
<member><function>list</function></member>
<member><function>each</function></member>
<member><function>call_user_func_array</function></member>
<member><function>array_map</function></member>
<member>&foreach;</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
-->