Files
php-doc-ru/reference/array/functions/array-walk.xml
2024-08-04 23:17:20 +03:00

247 lines
8.3 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: cec5275f23d2db648df30a5702b378044431be97 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
-->