как сделать пары значений массива?

У меня есть массив что-то вроде этого:

array('A','B','C','D','E');

и я хочу сделать пары каждого значения следующим образом:

  A, AB, ABC, ABCD, ABCDE
B, BC, BCD, BCDE
C, CD, CDE
D, DE
E

как Array (Все пары должны быть в одной решетке).

И я следил за этим вопросом:

Как мне сделать пары значений массива?

Но я не могу этого сделать.

Пожалуйста помоги

1

Решение

Для каждого из ваших входов, цикл между ним и концом входного массива. Для каждого результата добавьте диапазон между текущим и конечным входами к вашему результату.

$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;
}
4

Другие решения

$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);
1

Похоже на формат вывода:

$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);
1