Alicia Posted January 14, 2010 Share Posted January 14, 2010 Hi, I have another working function here and need some advise from some experts to make the final piece work. <? function permutations($letters,$num){ $last = str_repeat($letters{0},$num); $result = array(); while($last != str_repeat(lastchar($letters),$num)){ $result[] = $last; $last = char_add($letters,$last,$num-1); } $result[] = $last; return $result; } function char_add($digits,$string,$char){ if($string{$char} <> lastchar($digits)){ $string{$char} = $digits{strpos($digits,$string{$char})+1}; return $string; }else{ $string = changeall($string,$digits{0},$char); return char_add($digits,$string,$char-1); } } function lastchar($string){ return $string{strlen($string)-1}; } function changeall($string,$char,$start = 0,$end = 0){ if($end == 0) $end = strlen($string)-1; for($i=$start;$i<=$end;$i++){ $string{$i} = $char; } return $string; } $number = '1234'; $digit = 2; $Array=permutations($number,$digit); for($i=0 ; $i < count($Array) ; $i++) { echo $Array[$i] . "<BR>"; } ?> The function above works fine but how can I remove all the results from the same numbers (permutation) e.g : 12, 21,, then only show 12 .. same goes to the others like 24, 42 then only show 24 without any repetition of the same digit. Thanks. Quote Link to comment Share on other sites More sharing options...
Alicia Posted January 14, 2010 Author Share Posted January 14, 2010 anyone ? Quote Link to comment Share on other sites More sharing options...
taquitosensei Posted January 14, 2010 Share Posted January 14, 2010 It all depends. Will all your numbers 2 digit numbers? Do you want to keep the highest number or the lowest? for 2 digits and keeping the lowest digit something like this should work. foreach($array as $digit) { if(isset($array[strrev($digit)]) && $digit < strrev($digit)) { unset($array[$strrev[$digit]); } } Quote Link to comment Share on other sites More sharing options...
sasa Posted January 14, 2010 Share Posted January 14, 2010 try <?php function permutations($letters,$num){ $last = str_repeat($letters{0},$num); $result = array(); while($last != str_repeat(lastchar($letters),$num)){ $result[] = $last; $last = char_add($letters,$last,$num-1); } $result[] = $last; return $result; } function char_add($digits,$string,$char){ if($string{$char} <> lastchar($digits)){ $string{$char} = $digits{strpos($digits,$string{$char})+1}; return $string; }else{ $string = changeall($string,$digits{0},$char); return char_add($digits,$string,$char-1); } } function lastchar($string){ return $string{strlen($string)-1}; } function changeall($string,$char,$start = 0,$end = 0){ if($end == 0) $end = strlen($string)-1; for($i=$start;$i<=$end;$i++){ $string{$i} = $char; } return $string; } function my_remove($array){ foreach ($array as $k => $v){ $c = str_split($v); sort($c); $c = implode('',$c); if ($v != $c) unset($array[$k]); } return array_values($array); } $number = '1234'; $digit = 2; $Array=permutations($number,$digit); $Array = my_remove($Array); for($i=0 ; $i < count($Array) ; $i++) { echo $Array[$i] . "<BR>\n"; } ?> Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.