Skip to content

Instantly share code, notes, and snippets.

@missoxd
Last active November 12, 2015 19:54
Show Gist options
  • Save missoxd/accc21f2b6b234773591 to your computer and use it in GitHub Desktop.
Save missoxd/accc21f2b6b234773591 to your computer and use it in GitHub Desktop.
Anonymous recursive function - Returns array with all possible combinations, (if array values are arrays, they will be transformed to objects)
<?php
$flatten = function ( & $combines) use ( & $flatten) {
$current = pos($combines);
$current = array_map(function ($v) {
return is_array($v) ? (object) $v : $v;
}, $current);
if (!next($combines)) {
$end = end($combines);
$end = array_map(function ($v) {
return is_array($v) ? (object) $v : $v;
}, $end);
return $end;
}
$temporary = $flatten($combines);
$return = [];
foreach ($current as $z => $v) {
foreach ($temporary as $y => $t) {
$return[] = is_array($t) ? array_merge([$z => $v], $t) : [$z => $v, $y => $t];
}
}
next($combines);
return $return;
};
/*
Usage:
$array = array(
array('key_a' => '123'),
array('key_b' => '456', 'key_c' => '789'),
array('key_d' => '101112', 'key_f' => '131415'),
array('key_g' => '161718')
);
var_dump($flatten($array));
Results:
array (size=4)
0 =>
array (size=4)
'key_a' => string '123' (length=3)
'key_b' => string '456' (length=3)
'key_d' => string '101112' (length=6)
'key_g' => string '161718' (length=6)
1 =>
array (size=4)
'key_a' => string '123' (length=3)
'key_b' => string '456' (length=3)
'key_f' => string '131415' (length=6)
'key_g' => string '161718' (length=6)
2 =>
array (size=4)
'key_a' => string '123' (length=3)
'key_c' => string '789' (length=3)
'key_d' => string '101112' (length=6)
'key_g' => string '161718' (length=6)
3 =>
array (size=4)
'key_a' => string '123' (length=3)
'key_c' => string '789' (length=3)
'key_f' => string '131415' (length=6)
'key_g' => string '161718' (length=6)
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment