2015-01-08 5 views
0

Я пытаюсь сделать генератор сгенерированных с PHP и HTML.Сделать комбинации предложений из массива слов

Вот как это выглядит

х - флажок, если это слово можно опустить
ж - слово
г - замена (до 5 слов каждое слово)


| x_1 | x_1 | x_3 | x_4 | 
| w_1 | w_2 | w_3 | w_4 | 
| r1_1 | r2_1 | r3_1 | r4_1 | 
| r1_2 | r2_2 | r3_2 | r4_2 | 
| r1_3 | r2_3 | r3_3 | r3_3 | 
| r1_4 | r2_4 | r3_4 | r4_4 | 
| r1_5 | r2_5 | r3_5 | r4_5 | 

Теперь вот мой HTML форма

<input type="checkbox" name="can_be_left_out[1]"> 
<input type="checkbox" name="can_be_left_out[2]"> 
<input type="checkbox" name="can_be_left_out[3]"> 
<input type="checkbox" name="can_be_left_out[4]"> 

<input name="word[1]" type="text"> 
<input name="word[2]" type="text"> 
<input name="word[3]" type="text"> 
<input name="word[4]" type="text"> 

<input name="word_replace[1][1]" type="text"> 
<input name="word_replace[1][2]" type="text"> 
<input name="word_replace[1][3]" type="text"> 
<input name="word_replace[1][4]" type="text"> 
<input name="word_replace[1][5]" type="text"> 

<input name="word_replace[2][1]" type="text"> 
<input name="word_replace[2][2]" type="text"> 
<input name="word_replace[2][3]" type="text"> etc... 

Например вход будет выполнен из 4-х слов => «Я» «Я» «так», «хороший»
Где слово «так «может быть опущено, если флажок установлен и заменен, например,« слишком ».

Желаемая выход будет
Я так хорошо
Я слишком хорошо
Я хорошо

ли я делаю неправильно?
Есть ли способ сделать все сочетания с этими заменами?

Любая помощь была бы оценена, спасибо.

+1

вы можете предоставить некоторые выборочные данные, любой ваш желаемый результат? – Sean

+0

@Sean - Я редактировал свой вопрос, надеюсь, что это поможет понять. – George

ответ

1

Возможно, это лучший/более эффективный способ сделать это, но это 1 идея.
(1) получить все ваши опубликованные значения.
(2) создать массив слов с каждым словом, имеющим каждое возможное значение (заменить или оставить пустым).
(3) проведите каждое слово во вложенном цикле, чтобы получить возможность каждого предложения.
Конечные значения будут все в $sentences.

//Get the Posted values 
$can_be_left_out = $_POST["can_be_left_out"]; 
$words = $_POST["word"]; 
$word_replace = $_POST["word_replace"]; 

//Create a word array 
$wordArray = array(); 

//Loop through each word 
foreach($words as $key => $word){ 

    //add the word to the wordArray 
    $wordArray[$key][] = $word; 

    //Check for replacement words 
    if(isset($word_replace[$key])){ 

     foreach($word_replace[$key] as $replace){ 

      //Check if value is not empty 
      if(trim($replace) != ''){ 

       //Add word to wordArray 
       $wordArray[$key][] = $replace; 
      } 
     } 
    } 
    //Check if word can be left out 
    if(isset($can_be_left_out[$key])){ 

     //Add empty 'word' to wordArray 
     $wordArray[$key][] = ''; 
    } 
} 

//Create sentence array 
$sentences = array(); 

//loop through 1st word values 
for($a = 0; $a<count($wordArray[1]); $a++) 
{ 
    //loop through 2nd word values 
    for($b = 0; $b<count($wordArray[2]); $b++) 
    { 
     //loop through 3rd word values 
     for($c = 0; $c<count($wordArray[3]); $c++) 
     { 
      //loop through 4th word values 
      for($d = 0; $d<count($wordArray[4]); $d++) 
      { 
       //Build the sentence 
       $sentences[] = $wordArray[1]["$a"] ." ". $wordArray[2]["$b"] ." ". $wordArray[3]["$c"] ." ". $wordArray[4]["$d"]; 
      } 
     } 
    } 
} 

Например, с

$can_be_left_out = array(3=>true); 
$words = array(1=>"I",2=>"am",3=>"so",4=>"good"); 
$word_replace = array(3=>array(1=>"too"),4=>array(1=>"bad")); 

... code above ... 

print_r($sentences); 

приведет

Array 
(
    [0] => I am so good 
    [1] => I am so bad 
    [2] => I am too good 
    [3] => I am too bad 
    [4] => I am good 
    [5] => I am bad 
) 
Смежные вопросы