1
1
<?xml version =" 1.0" encoding =" utf-8" ?>
2
2
<!-- $Revision$ -->
3
- <!-- EN-Revision: 52ae7dd55e62b1e7b6920499ed7448892e09bb48 Maintainer: hirokawa Status: ready -->
4
- <!-- CREDITS: shimooka -->
3
+ <!-- EN-Revision: b8990010918c977f62f147cf57a04c7e36f625e5 Maintainer: hirokawa Status: ready -->
4
+ <!-- CREDITS: shimooka,mumumu -->
5
5
<refentry xml : id =" function.array-diff" xmlns =" http://docbook.org/ns/docbook" >
6
6
<refnamediv >
7
7
<refname >array_diff</refname >
59
59
<para >
60
60
<parameter >array1</parameter >
61
61
のエントリのうち、他のどの配列にも含まれない要素のみを含む配列を返します。
62
+ <parameter >array1</parameter > の配列のキーは維持されます。
62
63
</para >
63
64
</refsect1 >
64
65
@@ -92,17 +93,54 @@ Array
92
93
</screen >
93
94
</example >
94
95
</para >
96
+
97
+ <para >
98
+ <example >
99
+ <title >型が一致しない場合の <function >array_diff</function > の例</title >
100
+ <para >
101
+ <literal >(string) $elem1 === (string) $elem2</literal > の場合のみ、
102
+ つまり、<link linkend =" language.types.string.casting" >文字列表現</link > が同等な場合のみ、
103
+ 2つの要素は等しいとみなされます。
104
+ </para >
105
+ <programlisting role =" php" >
106
+ <![CDATA[
107
+ <?php
108
+ // 以下の例は、配列が文字列にキャストできないので警告が発生します
109
+ $source = [1, 2, 3, 4];
110
+ $filter = [3, 4, [5], 6];
111
+ $result = array_diff($source, $filter);
112
+
113
+ // 一方で、以下の例は問題ありません。なぜなら、オブジェクトは文字列にキャストできるからです。
114
+ class S {
115
+ private $v;
116
+
117
+ public function __construct(string $v) {
118
+ $this->v = $v;
119
+ }
120
+
121
+ public function __toString() {
122
+ return $this->v;
123
+ }
124
+ }
125
+
126
+ $source = [new S('a'), new S('b'), new S('c')];
127
+ $filter = [new S('b'), new S('c'), new S('d')];
128
+
129
+ $result = array_diff($source, $filter);
130
+
131
+ // $result には、S('a') のインスタンスが一つ含まれます。
132
+ ?>
133
+ ]]>
134
+ </programlisting >
135
+ <para >
136
+ 別の比較関数を使いたい場合は、<function >array_udiff</function > を参照して下さい。
137
+ </para >
138
+ </example >
139
+ </para >
95
140
</refsect1 >
96
141
97
142
<refsect1 role =" notes" >
98
143
&reftitle.notes;
99
- <note >
100
- <para >
101
- 二つの要素は、<literal >(string) $elem1 === (string) $elem2</literal >
102
- の場合のみ等しいと見直されます。言い換えると、文字列表現が同じ場合となります。
103
- <!-- TODO: example of it... -->
104
- </para >
105
- </note >
106
144
<note >
107
145
<para >
108
146
この関数は n 次元配列の一つの次元しかチェックしません。
@@ -117,6 +155,7 @@ Array
117
155
<para >
118
156
<simplelist >
119
157
<member ><function >array_diff_assoc</function ></member >
158
+ <member ><function >array_udiff</function ></member >
120
159
<member ><function >array_intersect</function ></member >
121
160
<member ><function >array_intersect_assoc</function ></member >
122
161
</simplelist >
0 commit comments