1 | <?php |
||
19 | class PsiFactory implements PsiFactoryInterface |
||
20 | { |
||
21 | /** |
||
22 | * {@inheritdoc} |
||
23 | */ |
||
24 | 70 | public function createSolver() |
|
28 | |||
29 | /** |
||
30 | * {@inheritdoc} |
||
31 | */ |
||
32 | 70 | public function createIterator(array $iteratables, PsiOptions $options) |
|
33 | { |
||
34 | 70 | $count = count($iteratables); |
|
35 | |||
36 | 70 | if ($count == 1) { |
|
37 | 67 | return $this->createSingleIterator($iteratables[0]); |
|
38 | } |
||
39 | |||
40 | 3 | if ($count > 1) { |
|
41 | // when we have multiple inputs we need an option to decide on how to deal with colliding keys |
||
42 | 3 | if ($options->isPreserveKeysOfMultipleInputs()) { |
|
43 | // this iterator return the original keys of each child iterator |
||
44 | // -> this leads to conflicts OR means we preserve keys |
||
45 | $iterator = new \AppendIterator(); |
||
46 | } else { |
||
47 | // this iterator will create numeric keys from 0 .. n |
||
48 | 3 | $iterator = new KeylessAppendIterator(); |
|
49 | } |
||
50 | |||
51 | 3 | foreach ($iteratables as $iteratable) { |
|
52 | |||
53 | 3 | $iterator->append( |
|
54 | 3 | $this->createSingleIterator($iteratable) |
|
55 | ); |
||
56 | } |
||
57 | |||
58 | 3 | return $iterator; |
|
59 | } |
||
60 | |||
61 | return new \ArrayIterator(); |
||
62 | } |
||
63 | |||
64 | /** |
||
65 | * @param mixed $iteratable |
||
66 | * @return \Iterator |
||
67 | * |
||
68 | * @throws PsiException |
||
69 | */ |
||
70 | 70 | private function createSingleIterator($iteratable) |
|
93 | } |
||
94 |