3v4l.org

run code in 200+ php & hhvm versions
Bugs & Features
<?php class Odometer { public function __construct(array $values, $max_places = 0){ $this->values = array_values($values); $this->max_places = $max_places; reset($values); $this->register[0] = key($values); end($values); $this->limit = key($values); } public function iterate($force = false){ $rollback = $this->register; $this->register[0]++; for($i = 0; $i < count($this->register); $i++){ if($this->register[$i] > $this->limit){ $this->register[$i] = 0; if(isset($this->register[$i+1])){ $this->register[$i+1]++; } else { if($this->max_places && count($this->register)+1 > $this->max_places && !$force){ $this->register = $rollback; return; } $this->register[$i+1] = 0; } } } } public function setMeter(){ for($i = 0; $i < count($this->register); $i++){ $this->meter[$i] = $this->values[$this->register[$i]]; } } public function readMeter(){ $this->setMeter(); return '[' . implode('][', array_reverse($this->meter)) . ']' . "\n"; } } $o = new Odometer(range('a','c'), 2); echo $o->readMeter(); for($i = 0; $i < 20; $i++){ $o->iterate(false); echo $o->readMeter(); }
based on SoNRB
Output for 5.6.0 - 7.3.0alpha1
[a] [b] [c] [a][a] [a][b] [a][c] [b][a] [b][b] [b][c] [c][a] [c][b] [c][c] [c][c] [c][c] [c][c] [c][c] [c][c] [c][c] [c][c] [c][c] [c][c]