1
0
mirror of https://github.com/php/doc-ja.git synced 2026-03-24 07:02:08 +01:00
Files
archived-doc-ja/reference/array/functions/array-walk.xml
2025-10-31 23:53:05 +09:00

243 lines
7.3 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"?>
<!-- $Revision$ -->
<!-- EN-Revision: 4ca7cdeaee66bff2fefb9df88213ea6fc2e6f3dc Maintainer: takagi Status: ready -->
<!-- CREDITS: hirokawa,shimooka,mumumu -->
<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>array</parameter> 配列の各要素にユーザー定義関数
<parameter>callback</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> により配列の値そのものを変更する必要がある場合、
<parameter>callback</parameter> の最初の引数は
<link linkend="language.references">リファレンス</link>
として渡す必要があります。この場合、配列の要素に加えた変更は、
配列自体に対して行われます。
</para>
</note>
<note>
<para>
内部関数の多く (たとえば <function>strtolower</function>) は、
期待しているよりも多い引数を受け取ると例外がスローされます。
そのため、<parameter>callback</parameter>
に直接指定することはできません。
</para>
</note>
<para>
変更される可能性があるのは配列の値だけであり、
その構造を変更することはできません。つまり、
プログラマは要素の追加や削除そして並べ替えなどができないということです。
コールバック関数がこの条件を満たさない場合は、
この関数の動作は未定義で予期せぬ結果を得ることになります。
</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 以降では、<parameter>callback</parameter> 関数が
2個より多いパラメータ配列メンバーの値およびキーを必要とする場合、
または、(<parameter>arg</parameter> も渡されている場合) 3個より多いパラメータを必要とする場合、
<classname>ArgumentCountError</classname> がスローされます。
7.1.0 より前のバージョンでは、<parameter>callback</parameter> 関数が 2 つより多いパラメータを必要とする場合、
<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>
<parameter>callback</parameter> が、
2番目と3番目の引数にリファレンス渡しされる引数を期待している場合、
この関数は <constant>E_WARNING</constant> を発生させるようになりました。
</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" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
function test_alter(&$item1, $key, $prefix)
{
$item1 = "$prefix: $item1";
}
function test_print($item2, $key)
{
echo "$key. $item2\n";
}
echo "Before ...:\n";
array_walk($fruits, 'test_print');
array_walk($fruits, 'test_alter', 'fruit');
echo "... and after:\n";
array_walk($fruits, 'test_print');
?>
]]>
</programlisting>
&example.outputs;
<screen role="php">
<![CDATA[
Before ...:
d. lemon
a. orange
b. banana
c. apple
... and after:
d. fruit: lemon
a. fruit: orange
b. fruit: banana
c. fruit: apple
]]>
</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
-->