2017-01-02 4 views
1

私は、テキストエリアと送信ボタンがあるフォームを持っています。私がしたいのは、テキストエリアに1行に1語追加し、フォームが提出されると、各単語をランダムに参加させたいと思います。テキストエリアから単語を取得し、それらを一緒にphpを使用して結合する

だから、例えば私がこれを提出した場合:

word1 
word2 
word3 
word4 

結果はこのようなものが考えられます。私は保存

<form action="index.php" method="POST"> 

    <textarea rows="5" name="strings" id="strings"></textarea><br /><br /> 
    <input type="submit" value="submit"> 

</form> 

word3word4 
word1word2 
word4word1 
etc. 

これまでのところ私は、フォームを持っています次のような変数でsubmissionを使用してください:

$strings = $_POST['strings']; 
$stringsArray = explode("\n", $strings); 

私はforeachループの使用を検討していましたが、反復ごとに2単語だけを表示する方法がわかりません。

答えて

2

私はあなたが2つの配列のデカルト積を探していると思う: を参照してください:あなたの最初の配列と二番目の配列は$ stringsArrayあるPHP 2D Array output all combinations

。それはでループしているため、あなたはforeachでループできないランダムな値をしたいので

foreach($cross as $item){ 
    if($item[0] != $item[1]) print($item[0].$item[1]."\n"); 
} 
1

:あなたが使用する必要がある特定のリンクで有効な回答者:

function array_cartesian() { 
    $_ = func_get_args(); 
    if(count($_) == 0) 
     return array(array()); 
    $a = array_shift($_); 
    $c = call_user_func_array(__FUNCTION__, $_); 
    $r = array(); 
    foreach($a as $v) 
     foreach($c as $p) 
      $r[] = array_merge(array($v), $p); 
    return $r; 
} 
$words = array('word1', 'word2', 'word3'); 
$cross = array_cartesian($words,$words); 

その後、あなたは結果を表示するためにこれを使用することができます注文。

代わりforループを使用します。

$stringArray = ['word1', 'word2', 'word3', 'word4']; 

for($i = 0, $c = count($stringArray); $i < $c; $i++){ 
    $lines[] = $stringArray[rand(0, $c - 1)] . $stringArray[rand(0, $c - 1)]; 
} 

print_r($lines); 

しかし、これは完全にランダムになりますが、それは二度同じ文字列をCONCATことができますが、どちらかそのオプションを排除しませんでした。

関連する問題