-
Notifications
You must be signed in to change notification settings - Fork 82
Expand file tree
/
Copy pathlist.xml
More file actions
293 lines (280 loc) · 7.7 KB
/
list.xml
File metadata and controls
293 lines (280 loc) · 7.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: eaec4ab10a65c4515ee2fb899d06e89bae3754b0 Maintainer: hirokawa Status: ready -->
<!-- Credits: mumumu -->
<refentry xml:id="function.list" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>list</refname>
<refpurpose>配列と同様の形式で、複数の変数への代入を行う</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>array</type><methodname>list</methodname>
<methodparam><type>mixed</type><parameter>var</parameter></methodparam>
<methodparam rep="repeat" choice="opt"><type>mixed</type><parameter>vars</parameter></methodparam>
</methodsynopsis>
<para>
<function>array</function> と同様に、
この関数は実際には関数ではなく言語構造です。
<function>list</function> は、
この関数は、配列や <link linkend="class.arrayaccess">ArrayAccess</link>
を実装したオブジェクトを扱うことができます。
<function>list</function> には、空の式を指定できません。
</para>
<note>
<para>
PHP 7.1.0 より前のバージョンでは、<function>list</function> は数値添字の配列でのみ動作し、
また、添字は 0 から始まることを想定していました。
</para>
</note>
<para>
PHP 7.1.0 より後のバージョンでは、<function>list</function>
には明示的にキーを含めることができます。
これによって、数値でないキーや、連続していないキーの配列を分解できるようになっています。
配列の分解に関する詳細な情報は、
<link linkend="language.types.array.syntax.destructuring">配列の分解</link> を参照ください。
</para>
<note>
<para>
定義されていない配列のキーにアクセスしようとすることは、
その他の未定義の変数にアクセスすることと同じです:
つまり、<constant>E_WARNING</constant>
(PHP 8.0.0 より前は、<constant>E_NOTICE</constant>)
レベルのエラーが発生し、結果は &null; になります。
</para>
<para>
スカラー値を分解しようとすると、
全ての変数に &null; が代入されます。
ArrayAccess を実装していないオブジェクトを分解しようとすると、
致命的なエラーが発生します。
</para>
</note>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>var</parameter></term>
<listitem>
<para>
変数。
</para>
</listitem>
</varlistentry>
</variablelist>
<variablelist>
<varlistentry>
<term><parameter>vars</parameter></term>
<listitem>
<para>
残りの変数。
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
代入した配列を返します。
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>7.3.0</entry>
<entry>
配列へ分割して代入する操作が、リファレンスへの代入をサポートしました。
</entry>
</row>
<row>
<entry>7.1.0</entry>
<entry>
キーを <function>list</function> 関数で指定できるようになりました。
これによって、キーが数値でなかったり、連続していなかったりした場合に配列の構造を変えることができるようになります。
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>list</function> の例</title>
<programlisting role="php">
<![CDATA[
<?php
$info = array('コーヒー', '茶色', 'カフェイン');
// すべての変数の取得
list($drink, $color, $power) = $info;
echo "$drink の色は $color で、$power が含まれています。\n";
// 一部の変数の取得
list($drink, , $power) = $info;
echo "$drink には $power が含まれています。\n";
// 三番目のみの取得
list( , , $power) = $info;
echo "$power 欲しい!\n";
// list() は文字列では動作しません
list($bar) = "abcde";
var_dump($bar); // NULL
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title><function>list</function> の使用法の例</title>
<programlisting role="php" annotations="non-interactive">
<![CDATA[
<?php
result = $pdo->query("SELECT id, name FROM employees");
while (list($id, $name) = $result->fetch(PDO::FETCH_NUM)) {
echo "id: $id, name: $name\n";
}
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>ネストした <function>list</function> の使用法</title>
<programlisting role="php">
<![CDATA[
<?php
list($a, list($b, $c)) = array(1, array(2, 3));
var_dump($a, $b, $c);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
int(1)
int(2)
int(3)
]]>
</screen>
</example>
</para>
<para>
<function>list</function> が配列の要素をどの順に処理するかは、配列の添字とは無関係です。
</para>
<para>
<example>
<title><function>list</function> と添字の定義順</title>
<programlisting role="php">
<![CDATA[
<?php
$foo = array(2 => 'a', 'foo' => 'b', 0 => 'c');
$foo[1] = 'd';
list($x, $y, $z) = $foo;
var_dump($foo, $x, $y, $z);
]]>
</programlisting>
<para>
結果は次のようになります (<function>list</function> 内で要素をどの順で利用しているかに注目しましょう)。
</para>
<screen>
<![CDATA[
array(4) {
[2]=>
string(1) "a"
["foo"]=>
string(1) "b"
[0]=>
string(1) "c"
[1]=>
string(1) "d"
}
string(1) "c"
string(1) "d"
string(1) "a"
]]>
</screen>
</example>
</para>
<para>
<example>
<title><function>list</function> をキーを指定して使う</title>
<simpara>
PHP 7.1.0 以降では、<function>list</function> に明示的に
キーを含めることができるようになりました。
任意の式も指定可能です。
数値や文字のキーも許されますが、
キーがない要素とある要素を混ぜることは許されません
</simpara>
<programlisting role="php">
<![CDATA[
<?php
$data = [
["id" => 1, "name" => 'Tom'],
["id" => 2, "name" => 'Fred'],
];
foreach ($data as ["id" => $id, "name" => $name]) {
echo "id: $id, name: $name\n";
}
echo PHP_EOL;
list(1 => $second, 3 => $fourth) = [1, 2, 3, 4];
echo "$second, $fourth\n";
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
id: 1, name: Tom
id: 2, name: Fred
2, 4
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>each</function></member>
<member><function>array</function></member>
<member><function>extract</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
-->