@@ -13,6 +13,7 @@ class ArrayColumnTest
1313 public function testArray1 (array $ array ): void
1414 {
1515 assertType ('list<string> ' , array_column ($ array , 'column ' ));
16+ assertType ('list<string> ' , array_column ($ array , 'column ' , null ));
1617 assertType ('array<int|string, string> ' , array_column ($ array , 'column ' , 'key ' ));
1718 assertType ('array<int|string, array<string, string>> ' , array_column ($ array , null , 'key ' ));
1819 }
@@ -22,12 +23,14 @@ public function testArray2(array $array): void
2223 {
2324 // Note: Array may still be empty!
2425 assertType ('list<string> ' , array_column ($ array , 'column ' ));
26+ assertType ('list<string> ' , array_column ($ array , 'column ' , null ));
2527 }
2628
2729 /** @param array{} $array */
2830 public function testArray3 (array $ array ): void
2931 {
3032 assertType ('array{} ' , array_column ($ array , 'column ' ));
33+ assertType ('array{} ' , array_column ($ array , 'column ' , null ));
3134 assertType ('array{} ' , array_column ($ array , 'column ' , 'key ' ));
3235 assertType ('array{} ' , array_column ($ array , null , 'key ' ));
3336 }
@@ -66,6 +69,7 @@ public function testArray8(array $array): void
6669 public function testConstantArray1 (array $ array ): void
6770 {
6871 assertType ('list<string> ' , array_column ($ array , 'column ' ));
72+ assertType ('list<string> ' , array_column ($ array , 'column ' , null ));
6973 assertType ('array<string, string> ' , array_column ($ array , 'column ' , 'key ' ));
7074 assertType ('array<string, array{column: string, key: string}> ' , array_column ($ array , null , 'key ' ));
7175 }
@@ -74,13 +78,15 @@ public function testConstantArray1(array $array): void
7478 public function testConstantArray2 (array $ array ): void
7579 {
7680 assertType ('array{} ' , array_column ($ array , 'foo ' ));
81+ assertType ('array{} ' , array_column ($ array , 'foo ' , null ));
7782 assertType ('array{} ' , array_column ($ array , 'foo ' , 'key ' ));
7883 }
7984
8085 /** @param array{array{column: string, key: 'bar'}} $array */
8186 public function testConstantArray3 (array $ array ): void
8287 {
8388 assertType ("array{string} " , array_column ($ array , 'column ' ));
89+ assertType ("array{string} " , array_column ($ array , 'column ' , null ));
8490 assertType ("array{bar: string} " , array_column ($ array , 'column ' , 'key ' ));
8591 assertType ("array{bar: array{column: string, key: 'bar'}} " , array_column ($ array , null , 'key ' ));
8692 }
@@ -96,6 +102,7 @@ public function testConstantArray4(array $array): void
96102 public function testConstantArray5 (array $ array ): void
97103 {
98104 assertType ("list<'foo'> " , array_column ($ array , 'column ' ));
105+ assertType ("list<'foo'> " , array_column ($ array , 'column ' , null ));
99106 assertType ("array<'bar'|int, 'foo'> " , array_column ($ array , 'column ' , 'key ' ));
100107 assertType ("array<'bar'|int, array{column?: 'foo', key?: 'bar'}> " , array_column ($ array , null , 'key ' ));
101108 }
@@ -104,12 +111,14 @@ public function testConstantArray5(array $array): void
104111 public function testConstantArray6 (array $ array ): void
105112 {
106113 assertType ('list<bool|string> ' , array_column ($ array , mt_rand (0 , 1 ) === 0 ? 'column1 ' : 'column2 ' ));
114+ assertType ('list<bool|string> ' , array_column ($ array , mt_rand (0 , 1 ) === 0 ? 'column1 ' : 'column2 ' , null ));
107115 }
108116
109117 /** @param non-empty-array<int, array{column: string, key: string}> $array */
110118 public function testConstantArray7 (array $ array ): void
111119 {
112120 assertType ('non-empty-list<string> ' , array_column ($ array , 'column ' ));
121+ assertType ('non-empty-list<string> ' , array_column ($ array , 'column ' , null ));
113122 assertType ('non-empty-array<string, string> ' , array_column ($ array , 'column ' , 'key ' ));
114123 assertType ('non-empty-array<string, array{column: string, key: string}> ' , array_column ($ array , null , 'key ' ));
115124 }
@@ -142,20 +151,23 @@ public function testConstantArray11(array $array): void
142151 public function testConstantArray12 (array $ array ): void
143152 {
144153 assertType ("array{0?: 'foo'} " , array_column ($ array , 'column ' ));
154+ assertType ("array{0?: 'foo'} " , array_column ($ array , 'column ' , null ));
145155 assertType ("array{bar?: 'foo'} " , array_column ($ array , 'column ' , 'key ' ));
146156 }
147157
148158 /** @param array{0?: array{column: 'foo1', key: 'bar1'}, 1?: array{column: 'foo2', key: 'bar2'}} $array */
149159 public function testConstantArray13 (array $ array ): void
150160 {
151161 assertType ("array{0?: 'foo1'|'foo2', 1?: 'foo2'} " , array_column ($ array , 'column ' ));
162+ assertType ("array{0?: 'foo1'|'foo2', 1?: 'foo2'} " , array_column ($ array , 'column ' , null ));
152163 assertType ("array{bar1?: 'foo1', bar2?: 'foo2'} " , array_column ($ array , 'column ' , 'key ' ));
153164 }
154165
155166 /** @param array{0?: array{column: 'foo1', key: 'bar1'}, 1: array{column: 'foo2', key: 'bar2'}} $array */
156167 public function testConstantArray14 (array $ array ): void
157168 {
158169 assertType ("array{0: 'foo1'|'foo2', 1?: 'foo2'} " , array_column ($ array , 'column ' ));
170+ assertType ("array{0: 'foo1'|'foo2', 1?: 'foo2'} " , array_column ($ array , 'column ' , null ));
159171 assertType ("array{bar1?: 'foo1', bar2: 'foo2'} " , array_column ($ array , 'column ' , 'key ' ));
160172 }
161173
@@ -165,6 +177,7 @@ public function testConstantArray14(array $array): void
165177 public function testImprecise1 (array $ array ): void
166178 {
167179 assertType ("list<'foo'> " , array_column ($ array , 'column ' ));
180+ assertType ("list<'foo'> " , array_column ($ array , 'column ' , null ));
168181 assertType ("array<'bar', 'foo'> " , array_column ($ array , 'column ' , 'key ' ));
169182 assertType ("array{bar: array{column?: 'foo', key: 'bar'}} " , array_column ($ array , null , 'key ' ));
170183 }
@@ -180,16 +193,19 @@ public function testImprecise2(array $array): void
180193 public function testImprecise3 (array $ array ): void
181194 {
182195 assertType ('list<string> ' , array_column ($ array , 'column ' ));
196+ assertType ('list<string> ' , array_column ($ array , 'column ' , null ));
183197 assertType ('array<int|string, string> ' , array_column ($ array , 'column ' , 'key ' ));
184198 }
185199
186200 /** @param array<int, DOMElement> $array */
187201 public function testImprecise5 (array $ array ): void
188202 {
189203 assertType ('list<string> ' , array_column ($ array , 'nodeName ' ));
204+ assertType ('list<string> ' , array_column ($ array , 'nodeName ' , null ));
190205 assertType ('array<string, string> ' , array_column ($ array , 'nodeName ' , 'tagName ' ));
191206 assertType ('array<string, DOMElement> ' , array_column ($ array , null , 'tagName ' ));
192207 assertType ('list ' , array_column ($ array , 'foo ' ));
208+ assertType ('list ' , array_column ($ array , 'foo ' , null ));
193209 assertType ('array<string, mixed> ' , array_column ($ array , 'foo ' , 'tagName ' ));
194210 assertType ('array<string> ' , array_column ($ array , 'nodeName ' , 'foo ' ));
195211 assertType ('array<DOMElement> ' , array_column ($ array , null , 'foo ' ));
@@ -199,9 +215,11 @@ public function testImprecise5(array $array): void
199215 public function testObjects1 (array $ array ): void
200216 {
201217 assertType ('non-empty-list<string> ' , array_column ($ array , 'nodeName ' ));
218+ assertType ('non-empty-list<string> ' , array_column ($ array , 'nodeName ' , null ));
202219 assertType ('non-empty-array<string, string> ' , array_column ($ array , 'nodeName ' , 'tagName ' ));
203220 assertType ('non-empty-array<string, DOMElement> ' , array_column ($ array , null , 'tagName ' ));
204221 assertType ('list ' , array_column ($ array , 'foo ' ));
222+ assertType ('list ' , array_column ($ array , 'foo ' , null ));
205223 assertType ('array<string, mixed> ' , array_column ($ array , 'foo ' , 'tagName ' ));
206224 assertType ('non-empty-array<string> ' , array_column ($ array , 'nodeName ' , 'foo ' ));
207225 assertType ('non-empty-array<DOMElement> ' , array_column ($ array , null , 'foo ' ));
@@ -211,9 +229,11 @@ public function testObjects1(array $array): void
211229 public function testObjects2 (array $ array ): void
212230 {
213231 assertType ('array{string} ' , array_column ($ array , 'nodeName ' ));
232+ assertType ('array{string} ' , array_column ($ array , 'nodeName ' , null ));
214233 assertType ('non-empty-array<string, string> ' , array_column ($ array , 'nodeName ' , 'tagName ' ));
215234 assertType ('non-empty-array<string, DOMElement> ' , array_column ($ array , null , 'tagName ' ));
216235 assertType ('list ' , array_column ($ array , 'foo ' ));
236+ assertType ('list ' , array_column ($ array , 'foo ' , null ));
217237 assertType ('array<string, mixed> ' , array_column ($ array , 'foo ' , 'tagName ' ));
218238 assertType ('non-empty-array<string> ' , array_column ($ array , 'nodeName ' , 'foo ' ));
219239 assertType ('non-empty-array<DOMElement> ' , array_column ($ array , null , 'foo ' ));
0 commit comments