From 3dce6a41cbb6f83055ec794d8dd05f7b5ed2e02b Mon Sep 17 00:00:00 2001 From: Dave Mc Nicoll Date: Mon, 1 May 2023 14:36:47 -0400 Subject: [PATCH] - Added a batch() function to ease array iterations in templates --- src/Extension/BatchExtension.php | 33 +++++++++++++++++++++++++++ src/Language/DefaultRegistrations.php | 1 + 2 files changed, 34 insertions(+) create mode 100644 src/Extension/BatchExtension.php diff --git a/src/Extension/BatchExtension.php b/src/Extension/BatchExtension.php new file mode 100644 index 0000000..c661d86 --- /dev/null +++ b/src/Extension/BatchExtension.php @@ -0,0 +1,33 @@ + [ $this, 'batch' ] + ]; + } + + public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string + { + return ""; + } + + public function batch(iterable $array, int $size, mixed $default = null) : \Generator + { + $split = ceil( count($array) / $size ); + + for($i = 0; $i < $split; $i++) { + $slice = array_slice(is_array($array) ? $array : iterator_to_array($array, true), $i * $size, $size, true); + $pad = ( count($slice) !== $size ) && ( $default !== null ); + yield $pad ? array_pad($slice, $size, $default) : $slice; + } + } +} diff --git a/src/Language/DefaultRegistrations.php b/src/Language/DefaultRegistrations.php index 3719ad7..72d40f0 100644 --- a/src/Language/DefaultRegistrations.php +++ b/src/Language/DefaultRegistrations.php @@ -67,6 +67,7 @@ class DefaultRegistrations implements LanguageRegistration $compiler->registerExtension(new \Picea\Extension\PhpExtension()); $compiler->registerExtension(new \Picea\Extension\PrintExtension()); $compiler->registerExtension(new \Picea\Extension\JsonExtension()); + $compiler->registerExtension(new \Picea\Extension\BatchExtension()); foreach($this->extensions ?? [] as $extension) { $compiler->registerExtension($extension);