Itertools для PHP: продолжение
Библиотеку itertools для ПХП я всё же переписал: теперь на вход всем функциям можно передавать что угодно итерируемое. Из ограничений осталось только два: функция iter в моём варианте принимает только один аргумент, а у функций product и izip_longest последний аргумент является обязательным.
Вот, кстати, как переписывается программка итерстрип, написанная мной семь лет назад на «Пайтоне», теперь её можно повторить на ПХП почти
require 'itertools.php';
use function itertools\groupby, itertools\xrange, itertools\chain, itertools\repeat;
function ntrim($letter, $n=3, $replby=1)
{
$shrink_groups = function($letter, $n) {
foreach (groupby(chain(repeat('', $n), $letter, repeat('', $n))) as list($item, $grp)) {
$grp = iterator_to_array($grp);
yield $item || sizeof($grp) < $n ? $grp : '';
}
};
return array_slice(iterator_to_array(chain(...$shrink_groups($letter, $n))), $replby, -$replby);
}
print_r(ntrim(['', 1, 2, 3, '', '', '', '', 4, '', '']));Увы, на ПХП всё ещё не так компактно
Комментарии 4
Мне хотелось сделать «честный» порт itertools (с генераторами), плюс разобраться с деталями генераторов в ПХП, заодно сравнить с тем, что есть в «Пайтоне».