3v4l.org

run code in 300+ PHP versions simultaneously
<?php // generic function to generate cross product of multi-dimensional array function arrayCrossProduct( array $data ) { $rowCount = 1; foreach( $data as &$datum ) { $datum = (array) $datum; $rowCount *= count( $datum ); reset( $datum ); // reset the array, just to be sure } unset( $datum ); // drop the reference, just to be safe $result = array(); while( $rowCount-- > 0 ) { $row = array(); foreach( $data as &$datum ) { $row[] = current( $datum ); } $result[] = $row; foreach( $data as &$datum ) { next( $datum ); if( !is_null( key( $datum ) ) ) { break; } reset( $datum ); } } return $result; } // example data $data = array( 'name' => 'Mike', 'country' => 'UK', 'prefers' => array( 'coffee', 'milk', 'bananas' ), 'age' => 25, 'parents' => array( 'John', 'Janine' ), 'children' => array( 'Jack', 'Jill', 'Joline' ) ); $i = 1; foreach( arrayCrossProduct( $data ) as $row ) { echo str_pad( (string) $i++, 2, " ", STR_PAD_LEFT ) . '. ' . implode( ', ', $row ) . PHP_EOL; }

preferences:
58.22 ms | 402 KiB | 5 Q