2013-02-26 155 views
0

好的,所以我有一個PHP應用程序,本質上是用XML文件中元素的引用填充數組,對數組執行shuffle()以隨機化數組,然後遍歷數組,在屏幕上顯示數組中的數據(以及XML文件)。PHP - 動態地更改內容

我目前的代碼工作正常 - 它填充數組,並對其進行混洗,並顯示第0個索引(哪個是隨機的)。我的問題在於我希望能夠動態地重新加載頁面上的內容,而不會丟失數組中的數據,但不會鏈接到不同的頁面。更具體地說,我希望能夠通過單擊按鈕來循環訪問數組(無需完全重新加載頁面,丟失數組中的寶貴數據)。

我嘗試使用一些隱藏的表單字段將數組的值加載到臨時數組中,然後在頁面重新加載時將它們反饋回來,但無濟於事。我發現了很多這樣的錯誤,而且很明顯這是一種快速骯髒的方式。

從本質上講,我想代碼做這樣的事情:

$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呢? – 2013-02-26 03:12:15

+0

如果你真的需要存儲數據的頁面:在文件,數據庫,會話,cookie,通過post \ e \解析得到隱藏的形式。最好的選擇取決於你的情況 – 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).');'; 

否則,你將需要更多的sofisticated方法,最好是通過一個AJAX查詢建立一個小型互聯網服務和得到的值。

0

這裏有幾個選項,但您需要了解PHP是一種服務器端語言,它在瀏覽器甚至可以看到頁面內容之前運行並完成。要做動態內容,那就是javascript和ajax的作用。我推薦一個JavaScript框架,如jQuery,使AJAX調用變得簡單。

一些方法做到這一點:

1)輸出的整個PHP數組到網頁上的JavaScript變量。使用javascript完成所有的數組排序。沒有AJAX。

2)使用php對數組進行排序,將其存儲在會話變量中。使用AJAX從會話內存中的數組請求新數據,如果需要的話使用數組,並返回您需要的值。

3)使用AJAX調用請求並返回整個已排序的PHP數組。如你所願,使用JavaScript來處理它。

根據您希望返回的數據大小,您可能希望通過AJAX和客戶端處理來儘可能減少數據請求的數量,並且只需使用PHP來執行所有數組操作,然後返回確切的值需要。