- implode: documentation ( source)
- iterator_to_array: documentation ( source)
<?php
function powerSet(Iterator $iterator){
if(!$iterator->valid()){
return yield new EmptyIterator();
}
$one = $iterator->current();
$rest = new NoRewindIterator($iterator);
$rest->next();
foreach(powerSet($rest) as $set){
$set = iterator_to_array($set);
yield new ArrayIterator($set);
yield (function($set, $one){
yield from $set;
yield $one;
})($set, $one);
}
}
function baz(){
yield 1;
yield 2;
yield 3;
yield 4;
}
$sets = powerSet(baz());
foreach($sets as $i => $set){
echo $i+1 . " {";
$arr = iterator_to_array($set);
echo implode(", ", $arr);
echo "}\n";
}