i gave a simple example
class Parallel implements Iterator { private int $index; private array $arrays; private int $countAny; public function __construct(array ...$arrays) { $this->countAny = count($arrays[0]); $this->arrays = $arrays; } #[\Override] public function current(): array { $return = []; foreach ($this->arrays as $array) { $return[] = $array[$this->index]; } return $return; } #[\Override] public function next(): void { $this->index++; } #[\Override] public function key(): mixed { return $this->index; } #[\Override] public function valid(): bool { return $this->index < $this->countAny; } #[\Override] public function rewind(): void { $this->index = 0; } } $parallel = new Parallel( [1, 2, 3, 4], ['a', 'b', 'c', 'd'], ['london', 'paris', 'rome', 'istanbul'], ); foreach ($parallel as [$number, $word, $city]) { echo PHP_EOL; printf('Number: %s, Word: %s, City: %s', $number, $word, $city); }