Skip to content

Commit f6028c2

Browse files
authored
Merge pull request #9 from macocci7/dev_#5
#5 #6 #7 #8 Refactor Code, Add limitation check, Sort array, Use Gene…
2 parents 2833a7b + 192d56f commit f6028c2

12 files changed

+1318
-169
lines changed

README.md

+458-54
Large diffs are not rendered by default.

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "macocci7/php-combination",
3-
"version": "1.0.0",
3+
"version": "1.0.1",
44
"description": "a simple PHP library to make combinations",
55
"type": "library",
66
"license": "MIT",

example/UseCombination.php

+14-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
// All Items
1111
$items = ['A', 'B', 'C', 'D', 'E', ];
12-
echo sprintf("All Items:\n\t(%s)\n\n", implode(",", $items));
12+
echo sprintf("All Items:\n\t(%s)\n\n", implode(", ", $items));
1313

1414
// Call back
1515
$f = function (array $array): string {
@@ -19,19 +19,29 @@
1919
// All Combinations
2020
echo sprintf(
2121
"All Combinations:\n\t%s\n\n",
22-
implode(",\n\t", array_map($f, $c->all($items)))
22+
implode("\n\t", array_map($f, $c->all($items)))
2323
);
2424

2525
// All Pairs
2626
echo sprintf(
2727
"All Pairs:\n\t%s\n\n",
28-
implode(",\n\t", array_map($f, $c->pairs($items)))
28+
implode("\n\t", array_map($f, $c->pairs($items)))
2929
);
3030

3131
// All Combinations of $n elements
3232
$n = 3;
3333
echo sprintf(
3434
"All Combinations of %d elements:\n\t%s\n\n",
3535
$n,
36-
implode(",\n\t", array_map($f, $c->ofN($items, $n)))
36+
implode("\n\t", array_map($f, $c->ofN($items, $n)))
37+
);
38+
39+
// All Combinations of $a to $b elements
40+
$a = 3;
41+
$b = 4;
42+
echo sprintf(
43+
"All Combinations of %d to %d elements:\n\t%s\n\n",
44+
$a,
45+
$b,
46+
implode("\n\t", array_map($f, $c->ofA2B($items, $a, $b)))
3747
);

example/UseCombination.txt

+66-49
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,77 @@
11
All Items:
2-
(A,B,C,D,E)
2+
(A, B, C, D, E)
33

44
All Combinations:
5-
(E),
6-
(D),
7-
(D, E),
8-
(C),
9-
(C, E),
10-
(C, D),
11-
(C, D, E),
12-
(B),
13-
(B, E),
14-
(B, D),
15-
(B, D, E),
16-
(B, C),
17-
(B, C, E),
18-
(B, C, D),
19-
(B, C, D, E),
20-
(A),
21-
(A, E),
22-
(A, D),
23-
(A, D, E),
24-
(A, C),
25-
(A, C, E),
26-
(A, C, D),
27-
(A, C, D, E),
28-
(A, B),
29-
(A, B, E),
30-
(A, B, D),
31-
(A, B, D, E),
32-
(A, B, C),
33-
(A, B, C, E),
34-
(A, B, C, D),
355
(A, B, C, D, E)
6+
(A, B, C, D)
7+
(A, B, C, E)
8+
(A, B, C)
9+
(A, B, D, E)
10+
(A, B, D)
11+
(A, B, E)
12+
(A, B)
13+
(A, C, D, E)
14+
(A, C, D)
15+
(A, C, E)
16+
(A, C)
17+
(A, D, E)
18+
(A, D)
19+
(A, E)
20+
(A)
21+
(B, C, D, E)
22+
(B, C, D)
23+
(B, C, E)
24+
(B, C)
25+
(B, D, E)
26+
(B, D)
27+
(B, E)
28+
(B)
29+
(C, D, E)
30+
(C, D)
31+
(C, E)
32+
(C)
33+
(D, E)
34+
(D)
35+
(E)
3636

3737
All Pairs:
38-
(A, B),
39-
(A, C),
40-
(A, D),
41-
(A, E),
42-
(B, C),
43-
(B, D),
44-
(B, E),
45-
(C, D),
46-
(C, E),
38+
(A, B)
39+
(A, C)
40+
(A, D)
41+
(A, E)
42+
(B, C)
43+
(B, D)
44+
(B, E)
45+
(C, D)
46+
(C, E)
4747
(D, E)
4848

4949
All Combinations of 3 elements:
50-
(C, D, E),
51-
(B, D, E),
52-
(B, C, E),
53-
(B, C, D),
54-
(A, D, E),
55-
(A, C, E),
56-
(A, C, D),
57-
(A, B, E),
58-
(A, B, D),
5950
(A, B, C)
51+
(A, B, D)
52+
(A, B, E)
53+
(A, C, D)
54+
(A, C, E)
55+
(A, D, E)
56+
(B, C, D)
57+
(B, C, E)
58+
(B, D, E)
59+
(C, D, E)
60+
61+
All Combinations of 3 to 4 elements:
62+
(A, B, C, D)
63+
(A, B, C, E)
64+
(A, B, C)
65+
(A, B, D, E)
66+
(A, B, D)
67+
(A, B, E)
68+
(A, C, D, E)
69+
(A, C, D)
70+
(A, C, E)
71+
(A, D, E)
72+
(B, C, D, E)
73+
(B, C, D)
74+
(B, C, E)
75+
(B, D, E)
76+
(C, D, E)
6077

example/UseCombinationGenerator.php

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
require_once('../vendor/autoload.php');
4+
5+
use Macocci7\PhpCombination\CombinationGenerator;
6+
7+
// Create an Instance
8+
$c = new CombinationGenerator();
9+
10+
// All Items
11+
$items = ['A', 'B', 'C', 'D', 'E', ];
12+
echo sprintf("All Items:\n\t(%s)\n\n", implode(", ", $items));
13+
14+
// Common Format
15+
$fmt = "\t(%s)\n";
16+
17+
// All Combinations
18+
echo "All Combinations:\n";
19+
foreach ($c->all($items) as $e) {
20+
echo sprintf($fmt, implode(', ', $e));
21+
}
22+
echo "\n";
23+
24+
// All Pairs
25+
echo "All Pairs:\n";
26+
foreach ($c->pairs($items) as $e) {
27+
echo sprintf($fmt, implode(', ', $e));
28+
}
29+
echo "\n";
30+
31+
// All Combinations of $n elements
32+
$n = 3;
33+
echo sprintf("All Combinations of %d elements:\n", $n);
34+
foreach ($c->ofN($items, $n) as $e) {
35+
echo sprintf($fmt, implode(', ', $e));
36+
}
37+
echo "\n";
38+
39+
// All Combinations of $a to $b elements
40+
$a = 3;
41+
$b = 4;
42+
echo sprintf(
43+
"All Combinations of %d to %d elements:\n",
44+
$a,
45+
$b,
46+
);
47+
foreach ($c->ofA2B($items, $a, $b) as $e) {
48+
echo sprintf($fmt, implode(', ', $e));
49+
}
50+
echo "\n";

example/UseCombinationGenerator.txt

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
All Items:
2+
(A, B, C, D, E)
3+
4+
All Combinations:
5+
(A, B, C, D, E)
6+
(A, B, C, D)
7+
(A, B, C, E)
8+
(A, B, C)
9+
(A, B, D, E)
10+
(A, B, D)
11+
(A, B, E)
12+
(A, B)
13+
(A, C, D, E)
14+
(A, C, D)
15+
(A, C, E)
16+
(A, C)
17+
(A, D, E)
18+
(A, D)
19+
(A, E)
20+
(A)
21+
(B, C, D, E)
22+
(B, C, D)
23+
(B, C, E)
24+
(B, C)
25+
(B, D, E)
26+
(B, D)
27+
(B, E)
28+
(B)
29+
(C, D, E)
30+
(C, D)
31+
(C, E)
32+
(C)
33+
(D, E)
34+
(D)
35+
(E)
36+
37+
All Pairs:
38+
(A, B)
39+
(A, C)
40+
(A, D)
41+
(A, E)
42+
(B, C)
43+
(B, D)
44+
(B, E)
45+
(C, D)
46+
(C, E)
47+
(D, E)
48+
49+
All Combinations of 3 elements:
50+
(A, B, C)
51+
(A, B, D)
52+
(A, B, E)
53+
(A, C, D)
54+
(A, C, E)
55+
(A, D, E)
56+
(B, C, D)
57+
(B, C, E)
58+
(B, D, E)
59+
(C, D, E)
60+
61+
All Combinations of 3 to 4 elements:
62+
(A, B, C, D)
63+
(A, B, C, E)
64+
(A, B, C)
65+
(A, B, D, E)
66+
(A, B, D)
67+
(A, B, E)
68+
(A, C, D, E)
69+
(A, C, D)
70+
(A, C, E)
71+
(A, D, E)
72+
(B, C, D, E)
73+
(B, C, D)
74+
(B, C, E)
75+
(B, D, E)
76+
(C, D, E)
77+

example/UseCombinationSort.php

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
require_once('../vendor/autoload.php');
4+
5+
use Macocci7\PhpCombination\Combination;
6+
7+
// Create an Instance
8+
$c = new Combination();
9+
10+
// All Items
11+
$items = ['A', 'B', 'C', 'D', 'E', ];
12+
echo sprintf("All Items:\n\t(%s)\n\n", implode(", ", $items));
13+
14+
// Set a flag to sort
15+
$sort = true;
16+
17+
// Call back
18+
$f = function (array $array): string {
19+
return sprintf("(%s)", implode(', ', $array));
20+
};
21+
22+
// All Combinations
23+
echo sprintf(
24+
"All Combinations:\n\t%s\n\n",
25+
implode("\n\t", array_map($f, $c->all($items, $sort)))
26+
);
27+
28+
// All Pairs: does not support sorting
29+
echo sprintf(
30+
"All Pairs:\n\t%s\n\n",
31+
implode("\n\t", array_map($f, $c->pairs($items)))
32+
);
33+
34+
// All Combinations of $n elements
35+
$n = 3;
36+
echo sprintf(
37+
"All Combinations of %d elements:\n\t%s\n\n",
38+
$n,
39+
implode("\n\t", array_map($f, $c->ofN($items, $n, $sort)))
40+
);
41+
42+
// All Combinations of $a to $b elements
43+
$a = 3;
44+
$b = 4;
45+
echo sprintf(
46+
"All Combinations of %d to %d elements:\n\t%s\n\n",
47+
$a,
48+
$b,
49+
implode("\n\t", array_map($f, $c->ofA2B($items, $a, $b, $sort)))
50+
);

0 commit comments

Comments
 (0)