<?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;
}
- Output for 5.1.0 - 5.1.6, 5.2.0 - 5.2.17, 5.3.0 - 5.3.29, 5.4.0 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.34, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
- 1. Mike, UK, coffee, 25, John, Jack
2. Mike, UK, milk, 25, John, Jack
3. Mike, UK, bananas, 25, John, Jack
4. Mike, UK, coffee, 25, Janine, Jack
5. Mike, UK, milk, 25, Janine, Jack
6. Mike, UK, bananas, 25, Janine, Jack
7. Mike, UK, coffee, 25, John, Jill
8. Mike, UK, milk, 25, John, Jill
9. Mike, UK, bananas, 25, John, Jill
10. Mike, UK, coffee, 25, Janine, Jill
11. Mike, UK, milk, 25, Janine, Jill
12. Mike, UK, bananas, 25, Janine, Jill
13. Mike, UK, coffee, 25, John, Joline
14. Mike, UK, milk, 25, John, Joline
15. Mike, UK, bananas, 25, John, Joline
16. Mike, UK, coffee, 25, Janine, Joline
17. Mike, UK, milk, 25, Janine, Joline
18. Mike, UK, bananas, 25, Janine, Joline
- Output for 8.3.5
- Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
1. Mike, UK, coffee, 25, John, Jack
2. Mike, UK, milk, 25, John, Jack
3. Mike, UK, bananas, 25, John, Jack
4. Mike, UK, coffee, 25, Janine, Jack
5. Mike, UK, milk, 25, Janine, Jack
6. Mike, UK, bananas, 25, Janine, Jack
7. Mike, UK, coffee, 25, John, Jill
8. Mike, UK, milk, 25, John, Jill
9. Mike, UK, bananas, 25, John, Jill
10. Mike, UK, coffee, 25, Janine, Jill
11. Mike, UK, milk, 25, Janine, Jill
12. Mike, UK, bananas, 25, Janine, Jill
13. Mike, UK, coffee, 25, John, Joline
14. Mike, UK, milk, 25, John, Joline
15. Mike, UK, bananas, 25, John, Joline
16. Mike, UK, coffee, 25, Janine, Joline
17. Mike, UK, milk, 25, Janine, Joline
18. Mike, UK, bananas, 25, Janine, Joline
- Output for 5.0.0 - 5.0.5
- Parse error: parse error, unexpected T_ARRAY, expecting '&' or T_VARIABLE in /in/4EtIF on line 4
Process exited with code 255. - Output for 4.4.2 - 4.4.9
- Parse error: syntax error, unexpected T_ARRAY, expecting ')' in /in/4EtIF on line 4
Process exited with code 255. - Output for 4.3.0 - 4.3.1, 4.3.5 - 4.3.11, 4.4.0 - 4.4.1
- Parse error: parse error, unexpected T_ARRAY, expecting ')' in /in/4EtIF on line 4
Process exited with code 255. - Output for 4.3.2 - 4.3.4
- Parse error: parse error, expecting `')'' in /in/4EtIF on line 4
Process exited with code 255.
preferences:
391.64 ms | 401 KiB | 466 Q