0

私のインクルードファイル(include.php)はこれです:

<?php
$myarray=(a,b,c);
shuffle($myarray);
?>

私のメインのphpファイルはこれです:

include('include.php');

if isset($_POST['submit_button']){
      echo "Button was clicked";
      echo $myarray;
      }
else {
     echo "Not clicked."; 
     echo $myarray;
     }
?>

<form method='POST'><input type='submit' name='submit_button'></form>

$myarrayボタンをクリックした後、の要素が異なる順序で表示されるのはなぜですか?一度だけシャッフルしませんか?

シャッフルが複数回実行されるのを防ぐにはどうすればよいですか?(ボタンがクリックされる前後で、myarrayの要素を同じ順序で表示できるようにするため)

4

2 に答える 2

2

PHPファイルは、リクエストごとに解釈されます。現在のように、システムにはメモリがないため、ファイルがアレイがすでにシャッフルされていることを「記憶」する方法はありません。さらに、配列を1回シャッフルしてから、ページを2回ロードし、シャッフルしないように管理した場合、変数は(a、b、c)に初期化されるため、配列は(a、b、c)になります。シャッフルすることはありません。

あなたがやりたいことをするために、私がそれを正しく理解していれば、あなたはセッションを使うことができます。

$myarray=(a,b,c);

if (!isset($_SESSION['shuffled'])) {
    shuffle($myarray);
    $_SESSION['shuffled'] = $myarray;
} else {
    $myarray = $_SESSION['shuffled'];
}
于 2012-04-04T03:36:14.840 に答える
1

これは、ページをロードするたびに、配列が再度シャッフルされるファイルが含まれているために発生します。

使用してserialize()から、希望する順序で配列をPOSTしてください。を使用して取得しますunserialize()

http://www.php.net/manual/en/function.serialize.php

于 2012-04-04T03:31:53.327 に答える