Почему мой включенный файл выполняется снова, когда isset(POST['submit'])?

Мой включенный файл (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 в том же порядке, до и после нажатия кнопки)

2 ответа

Решение

Ваши PHP-файлы интерпретируются при каждом запросе. Как у вас сейчас, в вашей системе нет памяти, поэтому ваши файлы не могут "запомнить", что массив уже перетасован. Кроме того, если вы перетасуете массив один раз, а затем загрузите страницу во второй раз, и вам не удастся перетасовать ее, массив будет (a,b,c), поскольку переменная инициализируется как (a, b, c) и никогда не тасуется.

Чтобы делать то, что вы хотите, если я правильно понимаю, вы можете использовать сеансы.

$myarray=(a,b,c);

if (!isset($_SESSION['shuffled'])) {
    shuffle($myarray);
    $_SESSION['shuffled'] = $myarray;
} else {
    $myarray = $_SESSION['shuffled'];
}

Это происходит потому, что каждый раз, когда вы загружаете страницу, включается файл, который также перетасовывает массив снова.

Попробуйте использовать serialize() а затем поместите массив в нужном вам порядке. Получить его с помощью unserialize()

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

Другие вопросы по тегам