@@ -10,6 +10,7 @@ function testArrays(array $array): void
10
10
/** @var array<int, array<string, string>> $array */
11
11
assertType ('array<int, string> ' , array_column ($ array , 'column ' ));
12
12
assertType ('array<int|string, string> ' , array_column ($ array , 'column ' , 'key ' ));
13
+ assertType ('array<int|string, array<string, string>> ' , array_column ($ array , null , 'key ' ));
13
14
14
15
/** @var non-empty-array<int, array<string, string>> $array */
15
16
// Note: Array may still be empty!
@@ -18,13 +19,15 @@ function testArrays(array $array): void
18
19
/** @var array{} $array */
19
20
assertType ('array{} ' , array_column ($ array , 'column ' ));
20
21
assertType ('array{} ' , array_column ($ array , 'column ' , 'key ' ));
22
+ assertType ('array{} ' , array_column ($ array , null , 'key ' ));
21
23
}
22
24
23
25
function testConstantArrays (array $ array ): void
24
26
{
25
27
/** @var array<int, array{column: string, key: string}> $array */
26
28
assertType ('array<int, string> ' , array_column ($ array , 'column ' ));
27
29
assertType ('array<string, string> ' , array_column ($ array , 'column ' , 'key ' ));
30
+ assertType ('array<string, array{column: string, key: string}> ' , array_column ($ array , null , 'key ' ));
28
31
29
32
/** @var array<int, array{column: string, key: string}> $array */
30
33
assertType ('array{} ' , array_column ($ array , 'foo ' ));
@@ -33,20 +36,24 @@ function testConstantArrays(array $array): void
33
36
/** @var array{array{column: string, key: 'bar'}} $array */
34
37
assertType ("array{string} " , array_column ($ array , 'column ' ));
35
38
assertType ("array{bar: string} " , array_column ($ array , 'column ' , 'key ' ));
39
+ assertType ("array{bar: array{column: string, key: 'bar'}} " , array_column ($ array , null , 'key ' ));
36
40
37
41
/** @var array{array{column: string, key: string}} $array */
38
42
assertType ("non-empty-array<string, string> " , array_column ($ array , 'column ' , 'key ' ));
43
+ assertType ("non-empty-array<string, array{column: string, key: string}> " , array_column ($ array , null , 'key ' ));
39
44
40
45
/** @var array<int, array{column?: 'foo', key?: 'bar'}> $array */
41
46
assertType ("array<int, 'foo'> " , array_column ($ array , 'column ' ));
42
47
assertType ("array<'bar'|int, 'foo'> " , array_column ($ array , 'column ' , 'key ' ));
48
+ assertType ("array<'bar'|int, array{column?: 'foo', key?: 'bar'}> " , array_column ($ array , null , 'key ' ));
43
49
44
50
/** @var array<int, array{column1: string, column2: bool}> $array */
45
51
assertType ('array<int, bool|string> ' , array_column ($ array , mt_rand (0 , 1 ) === 0 ? 'column1 ' : 'column2 ' ));
46
52
47
53
/** @var non-empty-array<int, array{column: string, key: string}> $array */
48
54
assertType ('non-empty-array<int, string> ' , array_column ($ array , 'column ' ));
49
55
assertType ('non-empty-array<string, string> ' , array_column ($ array , 'column ' , 'key ' ));
56
+ assertType ('non-empty-array<string, array{column: string, key: string}> ' , array_column ($ array , null , 'key ' ));
50
57
}
51
58
52
59
function testImprecise (array $ array ): void {
@@ -55,9 +62,11 @@ function testImprecise(array $array): void {
55
62
/** @var array{array{column?: 'foo', key: 'bar'}} $array */
56
63
assertType ("array<int, 'foo'> " , array_column ($ array , 'column ' ));
57
64
assertType ("array<'bar', 'foo'> " , array_column ($ array , 'column ' , 'key ' ));
65
+ assertType ("array{bar: array{column?: 'foo', key: 'bar'}} " , array_column ($ array , null , 'key ' ));
58
66
59
67
/** @var array{array{column: 'foo', key?: 'bar'}} $array */
60
68
assertType ("non-empty-array<'bar'|int, 'foo'> " , array_column ($ array , 'column ' , 'key ' ));
69
+ assertType ("non-empty-array<'bar'|int, array{column: 'foo', key?: 'bar'}> " , array_column ($ array , null , 'key ' ));
61
70
62
71
/** @var array{array{column: 'foo', key: 'bar'}}|array<int, array<string, string>> $array */
63
72
assertType ('array<int, string> ' , array_column ($ array , 'column ' ));
@@ -72,21 +81,27 @@ function testObjects(array $array): void {
72
81
/** @var array<int, DOMElement> $array */
73
82
assertType ('array<int, string> ' , array_column ($ array , 'nodeName ' ));
74
83
assertType ('array<string, string> ' , array_column ($ array , 'nodeName ' , 'tagName ' ));
84
+ assertType ('array<string, DOMElement> ' , array_column ($ array , null , 'tagName ' ));
75
85
assertType ('array<int, mixed> ' , array_column ($ array , 'foo ' ));
76
86
assertType ('array<string, mixed> ' , array_column ($ array , 'foo ' , 'tagName ' ));
77
87
assertType ('array<string> ' , array_column ($ array , 'nodeName ' , 'foo ' ));
88
+ assertType ('array<DOMElement> ' , array_column ($ array , null , 'foo ' ));
78
89
79
90
/** @var non-empty-array<int, DOMElement> $array */
80
91
assertType ('non-empty-array<int, string> ' , array_column ($ array , 'nodeName ' ));
81
92
assertType ('non-empty-array<string, string> ' , array_column ($ array , 'nodeName ' , 'tagName ' ));
93
+ assertType ('non-empty-array<string, DOMElement> ' , array_column ($ array , null , 'tagName ' ));
82
94
assertType ('array<int, mixed> ' , array_column ($ array , 'foo ' ));
83
95
assertType ('array<string, mixed> ' , array_column ($ array , 'foo ' , 'tagName ' ));
84
96
assertType ('non-empty-array<string> ' , array_column ($ array , 'nodeName ' , 'foo ' ));
97
+ assertType ('non-empty-array<DOMElement> ' , array_column ($ array , null , 'foo ' ));
85
98
86
99
/** @var array{DOMElement} $array */
87
100
assertType ('array{string} ' , array_column ($ array , 'nodeName ' ));
88
101
assertType ('non-empty-array<string, string> ' , array_column ($ array , 'nodeName ' , 'tagName ' ));
102
+ assertType ('non-empty-array<string, DOMElement> ' , array_column ($ array , null , 'tagName ' ));
89
103
assertType ('array<int, mixed> ' , array_column ($ array , 'foo ' ));
90
104
assertType ('array<string, mixed> ' , array_column ($ array , 'foo ' , 'tagName ' ));
91
105
assertType ('non-empty-array<int|string, string> ' , array_column ($ array , 'nodeName ' , 'foo ' ));
106
+ assertType ('non-empty-array<int|string, DOMElement> ' , array_column ($ array , null , 'foo ' ));
92
107
}
0 commit comments