En alternativ implementering af Stefans ide om den binære repræsentation af permutationerne.
- // input array
- $input = array('AB','CD','EF');
- // split hver værdi til et array af mulige værdier
- $input = array_map(function($x) { return array($x[0], $x); }, $input);
- // lav binær notering for alle mulige permutationer
- $result = array_map(function($x) { return base_convert($x, 10, 2); }, range(0,pow(2,count($input))-1));
- // find længden på den sidste key i arrayet.
- $long = strlen($result[count($result)-1]);
- // put leading zeros på tal der er kortere end den længste.
- $result = array_map(function($x) { global $long; return str_pad($x, $long, '0'); }, $result);
- // erstat de binære værdier med de rigtige værdier
- $result = array_map(function($x) { global $input; $i = 0; foreach (str_split($x) as $j) { $r .= $input[$i][$j]; $i++; } return $r; }, $result);
-
- print_r($result);
Fordelen er umiddelbart at den virker uanset hvor mange elementer der er i dit input array. Og så synes jeg det virker mere logisk at bruge array_map
Indlæg senest redigeret d. 15.03.2012 15:23 af Bruger #17015