-
Notifications
You must be signed in to change notification settings - Fork 575
Expand file tree
/
Copy pathbug-12078.php
More file actions
67 lines (59 loc) · 1.6 KB
/
bug-12078.php
File metadata and controls
67 lines (59 loc) · 1.6 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
<?php declare(strict_types=1);
namespace Bug12078;
use function PHPStan\Testing\assertType;
/**
* @return array <string,string>
*/
function returnsData6M(): array
{
return ["A" => 'data A', "B" => 'Data B'];
}
/**
* @return array <string,string>
*/
function returnsData3M(): array
{
return ["A" => 'data A', "C" => 'Data C'];
}
function main()
{
$arrDataByKey = [];
$arrData6M = returnsData6M();
if ([] === $arrData6M) {
echo "No data for 6M\n";
} else {
foreach ($arrData6M as $key => $data) {
$arrDataByKey[$key]['6M'][] = $data;
}
}
$arrData3M = returnsData3M();
if ([] === $arrData3M) {
echo "No data for 3M\n";
} else {
foreach ($arrData3M as $key => $data) {
$arrDataByKey[$key]['3M'][] = $data;
}
}
/*
So $arrDataByKey looks like
[
'A'=>[
'6M'=>['data A'],
'3M'=>['data A']
],
'B'=>[
'6M'=>['data B']
],
'C'=>[
'3M'=>['data C']
]
]
*/
assertType("non-empty-array<string, array{'6M'?: non-empty-list<string>, '3M': non-empty-list<string>}>|array<string, array{'6M': non-empty-list<string>}>", $arrDataByKey);
foreach ($arrDataByKey as $key => $arrDataByKeyForKey) {
assertType("non-empty-array{'6M'?: non-empty-list<string>, '3M'?: non-empty-list<string>}", $arrDataByKeyForKey);
echo [] === ($arrDataByKeyForKey['6M'] ?? []) ? 'No 6M data for key ' . $key . "\n" : 'We got 6M data for key ' . $key . "\n";
echo [] === ($arrDataByKeyForKey['3M'] ?? []) ? 'No 3M data for key ' . $key . "\n" : 'We got 3M data for key ' . $key . "\n";
assertType("non-empty-array{'6M'?: non-empty-list<string>, '3M'?: non-empty-list<string>}", $arrDataByKeyForKey);
}
}