2013-02-26 6 views
0

Хорошо, поэтому у меня есть приложение PHP, которое, по сути, заполняет массив ссылками на элементы в XML-файле, делает shuffle() в массиве для его рандомизации, затем циклически проходит через массив, отображающий данные из массива (и ergo XML-файл) на экране.PHP - динамическое изменение содержимого

Мой текущий код отлично работает - он заполняет массив, перетасовывает его и отображает 0-й индекс (который является случайным). Моя проблема заключается в том, что Я хочу, чтобы иметь возможность перезагружать контент на странице динамически, не теряя данные в массивах, но не ссылаясь на другую страницу. Более конкретно, я хочу иметь возможность циклически перемещаться по массиву одним нажатием кнопки (без полной перезагрузки страницы, теряя ценные данные в массиве).

Я попытался использовать некоторые скрытые поля формы, чтобы загрузить значения массива во временный массив, а затем вернуть их обратно в качестве перезагрузки страницы, но безрезультатно. Я нахожу много ошибок таким образом, и это довольно явно быстрый n-грязный способ сделать это.

По существу, я хочу код, чтобы сделать что-то вроде этого:

$heaps_array = array(...); // Populated by, let's say 3 strings, for argument's sake 
shuffle($heaps_array); 
echo $heaps_array[0]; 
// User clicks the Next button... 
// Get rid of the $heaps_array[0] from the page content, and... 
echo $heaps_array[1]; 
// User clicks the Next button... 
// Get rid of the $heaps_array[1] from the page content, and... 
echo $heaps_array[2]; 
// User clicks the Next button... 
... 
+0

Возможно, вы смотрите на AJAX? –

+0

, если вы используете страницу, данные должны быть сохранены: в файле, db, session, cookie, разобранном через post \ e \ get в скрытой форме. лучший вариант зависит от вашей ситуации – 2013-02-26 03:13:04

+0

, если заказ случайный, то все, что вам нужно знать, это последнее (-ы), которое видит пользователь, выбирая новый случайный случай, который исключает уже увиденное, что должно быть намного меньше данных для перемещения , – 2013-02-26 03:14:57

ответ

0

PHP имеет/есть запрос на основе интерпретатор языка, так что вы должны запустить скрипт каждый раз, когда вам нужно что-то от сервера. Вы не можете иметь эти массивы всегда в памяти, не используя какой-либо механизм хранения (memcached, MySQL, вы его называете).

Как уже говорилось, вы можете отправить массив во внешний интерфейс и манипулировать им в JavaScript. Таким образом, вы не будете загружать сервер и иметь все данные в памяти.

0

Не можете отправить массив на клиентскую сторону (грязный способ, а не ajax)? Затем отображать значения с помощью js.

я имею в виду:

echo 'var array = new Array('.implode(',', $array).');'; 

В противном случае вам потребуется более замысловатый метод, лучше всего построить мини WebService и получить значение через запрос AJAX.

0

У вас есть несколько вариантов здесь, но вам нужно понять, что PHP является языком на стороне сервера, который запускается и заканчивается, прежде чем браузер даже увидит содержимое страницы. Чтобы сделать динамический контент, вот где javascript и ajax вступают в игру. Я рекомендую структуру javascript, такую ​​как jQuery, которая делает AJAX-вызовы простыми.

Некоторых способы сделать это:

1) Вывод всего массив PHP в переменную JavaScript на странице. Сделайте всю сортировку массива с помощью javascript. Нет AJAX.

2) Используйте php для сортировки массива, сохраните его в переменной сеанса. Используйте AJAX для запроса новых данных из массива в памяти сеанса, при необходимости прибегайте к массиву и верните требуемое значение.

3) Используйте вызов AJAX для запроса и возврата всего отсортированного массива PHP. Используйте javascript, чтобы сделать это по своему усмотрению.

В зависимости от размера данных, которые вы хотите вернуть, вы можете свести к минимуму объем запроса данных через AJAX и обработку на стороне клиента и просто использовать PHP для выполнения всего массива, а затем вернуть точные значения, которые вы необходимость.

Смежные вопросы