У меня есть массив что-то вроде этого:
array('A','B','C','D','E');
и я хочу сделать пары каждого значения следующим образом:
A, AB, ABC, ABCD, ABCDE
B, BC, BCD, BCDE
C, CD, CDE
D, DE
E
как Array
(Все пары должны быть в одной решетке).
И я следил за этим вопросом:
Как мне сделать пары значений массива?
Но я не могу этого сделать.
Пожалуйста помоги
Для каждого из ваших входов, цикл между ним и концом входного массива. Для каждого результата добавьте диапазон между текущим и конечным входами к вашему результату.
$input = array('A', 'B', 'C', 'D', 'E');
$output = array();
for ($i = 0; $i < count($input); $i++) {
$row = array($input[$i]);
for ($j = $i + 1; $j < count($input); $j++) {
$row[] = implode('', range($input[$i], $input[$j]));
}
$output[] = $row;
}
$data = array('A','B','C','D','E');
$chars = count($data);
$combinations = array();
foreach ($data as $key => $startChar) {
$length = 0;
while ($length < $chars - $key) {
$combinations[] = implode(array_slice($data, $key, ++$length));
}
}
var_dump($combinations);
Похоже на формат вывода:
$letters = array('A','B','C','D','E');
$result = array();
$x = 0;
while(count($letters) > 0) {
$l = array_shift($letters);
$result[$x][] = $l;
foreach($letters as $k => $letter){
$result[$x][] = $l . implode(array_slice($letters, 0, $k+1));
}
$result[$x] = implode(', ', $result[$x]);
$x++;
}
echo '<pre>';
print_r($result);