@ya_yshel_rabotati_v_teleg

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

Как можно реализовать составления таких предложений из такого массива на php
Array
(
[0] => бесплатен
[1] => бесплатен
[2] => бесплатна
[3] => бесплатная
[4] => бесплатно
[5] => бесплатного
[6] => бесплатное
[7] => бесплатной
[8] => бесплатном
[9] => бесплатному
[10] => бесплатною
[11] => бесплатную
[12] => бесплатны
[13] => бесплатные
[14] => бесплатным
[15] => бесплатными
[16] => бесплатных
)

[1] => Array
(
[0] => подарка
[1] => подаркам
[2] => подарками
[3] => подарках
[4] => подарке
[5] => подарки
[6] => подарков
[7] => подарком
[8] => подарку
)

[2] => Array
(
[0] => в
[1] => на
)

[3] => Array
(
[0] => москве
[1] => москвой
[2] => москвою
[3] => москву
[4] => москвы
)
)

бесплатен подарка в москве
бесплатен подарка в москвой
бесплатен подарка в москвою
бесплатен подарка в москву
бесплатен подарка в москвы

бесплатен подарка на москве
бесплатен подарка на москвой
бесплатен подарка на москвою
бесплатен подарка на москву
бесплатен подарка на москвы

...
  • Вопрос задан
  • 183 просмотра
Решения вопроса 1
alsopub
@alsopub
Вариант с построением массива:
$words = array(
  array('бесплатен', 'бесплатен', 'бесплатна', 'бесплатная', 'бесплатно', 'бесплатного', 'бесплатное', 'бесплатной', 'бесплатном', 'бесплатному', 'бесплатною', 'бесплатную', 'бесплатны', 'бесплатные', 'бесплатным', 'бесплатными', 'бесплатных'),
  array('подарка', 'подаркам', 'подарками', 'подарках', 'подарке', 'подарки', 'подарков', 'подарком', 'подарку'),
  array('в', 'на'),
  array('москве', 'москвой', 'москвою', 'москву', 'москвы')
);


function vars($w, $i) {
	$res = array();
	if ($i == count($w) - 1) {
		$res = $w[$i];
	} else {
		$variants = vars($w, $i+1);
		foreach ($w[$i] as $v) {
			foreach ($variants as $va) {
				array_push($res, $v.' '.$va);
			}
		}
	}
	return $res;
}


$res = vars($words, 0);
foreach ($res as $v) {
	echo($v.'<br>');
}


Вариант без построения массива:
$words = array(
  array('бесплатен', 'бесплатен', 'бесплатна', 'бесплатная', 'бесплатно', 'бесплатного', 'бесплатное', 'бесплатной', 'бесплатном', 'бесплатному', 'бесплатною', 'бесплатную', 'бесплатны', 'бесплатные', 'бесплатным', 'бесплатными', 'бесплатных'),
  array('подарка', 'подаркам', 'подарками', 'подарках', 'подарке', 'подарки', 'подарков', 'подарком', 'подарку'),
  array('в', 'на'),
  array('москве', 'москвой', 'москвою', 'москву', 'москвы')
);


function vars(&$w, $i=0, $s='') {
	if ($i == count($w)) {
		echo($s.'<br>');
	} else {
		foreach ($w[$i] as $v) {
			vars($w, $i+1, $s.' '.$v);
		}
	}
}

vars($words);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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