Задать вопрос
CrewCut
@CrewCut
Коплю силы на переезд в тропики

Как получить все возможные варианты «соединения» строк из 4 или более массивов?

Имеется 4 массива, содержащих строки. Нужно получить единый массив, в котором будут все возможные соединения строк из этих массивов, при том, что кол-во строк может быть не одинаковым в каждом из них. На примере массивов с одной строкой:

Array 1 = ( 'a' );
Array 2 = ( 'б' );
Array 3 = ( 'в' );
Array 4 = ( 'г' );

result = ( 
'aб',
'ав',
'аг',
'бв',
'бг',
'вг',
'абвг'
 )


Никак не могу понять как так сделать, какая логика должна быть. Как вариант упрощения - можно брать все значения, не только уникальные ( например:
аб, ав, аг, ба, бв, бг, ва, вб, вг, га, гб, гв, абвг
)
  • Вопрос задан
  • 216 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
dimonchik2013
@dimonchik2013
non progredi est regredi
число перестановок - n факториал

т.е. count = len(a)*len(b)*len(c)*..*len(x)

алгоритм - банальный for по вложенным массивам

a = ['a1','a2','a3',]
b = ['b1',]
c = ['c1','c2',]
d = ['d1','d2','d3','d4',]


total = []
for i in range(0, len(a)):
    for j in range(0, len(b)):
        for k in range(0, len(c)):
            for l in range(0, len(d)):
                total.append(a[i]+b[j]+c[k]+d[l])

print(total)
print(len(total))
Ответ написан
CrewCut
@CrewCut Автор вопроса
Коплю силы на переезд в тропики
Спасибо dimonchik2013 за подсказанный алгоритм. Кому надо, вот моё решение на php:
$a = ['a1','a2','a3'];
		$b = ['b1'];
		$c = ['c1','c2'];
		$d = ['d1','d2','d3','d4'];

		$total = [];
		for ($i = 0; $i <= count($a); $i++) {
			for ($j = 0; $j <= count($b); $j++) {
				for ($k = 0; $k <= count($c); $k++) {
					for ($l = 0; $l <= count($d); $l++) {
						$r = array($a[$i], $b[$j], $c[$k], $d[$l]); // варианты в массив
						$r = array_filter($r); // удаляем пустые варианты
						$r = implode(' ', $r); // массив значений в строку
						array_push($total, $r); // и эту строку в итоговый массив
					}
				}	
			}
		}
		$total= array_filter($total);
		asort($total); // сортировка массива по алфавиту
		// выведем результат
		echo '<pre>';
			print_r($total);
			echo '<br>Всего результатов: '.count($total);
		echo '</pre>';
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы