|
18 | 18 | use Iterator; |
19 | 19 | use League\Csv\Query\Constraint\Criteria; |
20 | 20 | use League\Csv\Query\Predicate; |
| 21 | +use League\Csv\Schema\Inspector; |
| 22 | +use League\Csv\Schema\Schema; |
21 | 23 | use League\Csv\Serializer\Denormalizer; |
22 | 24 | use League\Csv\Serializer\MappingFailed; |
23 | 25 | use League\Csv\Serializer\TypeCastingFailed; |
@@ -203,6 +205,35 @@ public function map(callable $callback): Iterator |
203 | 205 | return MapIterator::fromIterable($this->getRecords(), $callback); |
204 | 206 | } |
205 | 207 |
|
| 208 | + /** |
| 209 | + * @param callable(TInitial|null, array<mixed>, array-key=): TInitial $callback |
| 210 | + * @param TInitial|null $initial |
| 211 | + * |
| 212 | + * @template TInitial |
| 213 | + * |
| 214 | + * @throws SyntaxError |
| 215 | + * |
| 216 | + * @return TInitial|null |
| 217 | + */ |
| 218 | + public function reduce(callable $callback, mixed $initial = null): mixed |
| 219 | + { |
| 220 | + foreach ($this->getRecords() as $offset => $record) { |
| 221 | + $initial = $callback($initial, $record, $offset); |
| 222 | + } |
| 223 | + |
| 224 | + return $initial; |
| 225 | + } |
| 226 | + |
| 227 | + public function inferSchema(?Inspector $inspector = null, array $header = []): Schema |
| 228 | + { |
| 229 | + return ($inspector ?? Inspector::default())->schema($this, $header); |
| 230 | + } |
| 231 | + |
| 232 | + public function inferRecords(?Inspector $inspector = null, array $header = []): Iterator |
| 233 | + { |
| 234 | + return $this->inferSchema($inspector, $header)->parse($this); |
| 235 | + } |
| 236 | + |
206 | 237 | /** |
207 | 238 | * @param non-negative-int $nth |
208 | 239 | * |
|
0 commit comments