Reputation: 305
How can I get all the possible combinations of given numbers.
For instance I have
$arr = [ 1, 2, 3, 4]
I want to get the combinations without any duplicates inside the combinations
[1] => [1]
[2] => [2]
[3] => [3]
[4] => [4]
[5] => [1, 2]
[6] => [1, 3]
[7] => [1, 4]
[8] => [2, 3]
[9] => [2, 4]
[10] => [3, 4]
[11] => [1, 2, 3]
[12] => [1, 2, 4]
[13] => [1, 3, 4]
[14] => [2, 3, 4]
[15] => [1, 2, 3, 4]
Upvotes: 3
Views: 2171
Reputation: 25
I didn't like that the given solution is modifying an iterated variable within its loop and also I wanted a solution that I can easily understand to port to other languages. So here:
<?php
function permutation(array $arr)
{
$out=[[]];
foreach($arr as $key2=> $item2){
$copy=$out;
foreach($copy as $k=> $v){
array_push($copy[$k],$item2 );
}
array_push($out,...$copy);
}
return $out;
}
print_r(permutation(array(1,2,3,4)));
This second one is intentionally weird to make it better to understand what is going on.
<?php
function permutation(array $arr)
{
$out=[];
while(count($arr)){
$out_temp=[[]];
foreach($arr as $key2=> $item2){
$copy=$out_temp;
foreach($copy as $k=> $v){
array_push($copy[$k],$item2 );
}
if($key2==0){
unset($out_temp[0]);
}
array_push($out_temp,...$copy);
}
array_push($out,...$out_temp);
array_shift($arr);
}
return $out;
}
print_r(permutation(array(1,2,3,4,5)));
Upvotes: 0
Reputation: 3195
I hope below function work as per your expected output :
function get_array_combination($arr) {
$results = array(array( ));
foreach ($arr as $values)
foreach ($results as $combination)
array_push($results, array_merge($combination, array($values))); // Get new values and merge to your previous combination. And push it to your results array
return $results;
}
$set = array('1', '2', '3', '4');
$final_array = get_array_combination($set);
echo "<pre>";
print_r(array_values(array_filter($final_array))); // Removed blank entry from array and re indexing array keys.
Upvotes: 4