Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php array_pop函数弹出数组的两个元素_Php_Arrays_Debugging_Shuffle - Fatal编程技术网

Php array_pop函数弹出数组的两个元素

Php array_pop函数弹出数组的两个元素,php,arrays,debugging,shuffle,Php,Arrays,Debugging,Shuffle,代码没有问题,它可以正常工作,但在某些模板上不能 以下是它的工作原理: 我将模板数组存储到会话中,并且仅当会话为空时才将它们洗牌。每次重新加载页面时,我都会弹出会话的一个元素。因此,每次页面中包含模板时,它都会从数组中弹出 这里的问题是,在一些模板上,array\u pop函数会在页面重新加载时弹出数组的两个元素(包含的模板+另一个) 我试图删除“有问题”模板上的一些代码,但找不到解决方案 我需要一些帮助来确定这个问题 session_start(); $templates = array("t

代码没有问题,它可以正常工作,但在某些模板上不能

以下是它的工作原理:

我将模板数组存储到会话中,并且仅当会话为空时才将它们洗牌。每次重新加载页面时,我都会弹出会话的一个元素。因此,每次页面中包含模板时,它都会从数组中弹出

这里的问题是,在一些模板上,
array\u pop
函数会在页面重新加载时弹出数组的两个元素(包含的模板+另一个)

我试图删除“有问题”模板上的一些代码,但找不到解决方案

我需要一些帮助来确定这个问题

session_start();
$templates = array("t1.php","t2.php","t3.php"); #list of templates paths

if (!isset($_SESSION['templates']) || empty($_SESSION['templates'])) {
    shuffle($templates); #shuffle them 
    $_SESSION['templates'] = $templates; #store them in sesssion
}

$currentTemplate = array_pop($_SESSION['templates']); #pops one on each page reload

include $currentTemplate; #includes the next template of the array
#on each page reload an element will be popped out and the next one will    be included, the issue, is that sometimes two elements-templates are popped out of the array.
我检测到它通过以下代码弹出两个元素:

    foreach($_SESSION['templates']  as $key=>$value)
        {
 echo 'The value of session['."'".$key."'".'] is '."'".$value."'".' <br />';
        }
foreach($\u会话['templates']作为$key=>$value)
{
echo“session[.”“$key.”的值为“.”“$value.”“
”; }
不重新加载

会话['0']的值为't3.php'

会话['1']的值为't2.php'

重新加载1:

在一些模板上,我的代码运行良好,我重复一遍。我不知道发生了什么:)

编辑#3-离线讨论后

原来JS正在向PHP脚本发起第二个请求(在后台),该请求正在减少会话中存储的模板

具体地说,是在图像上循环的预加载程序启动了对index.php的额外请求

img = document.images;
jax = img.length;

for(var i=0; i<jax; i++) {
    console.log(img[i].src);
} 
编辑#1-使其在每次加载页面时都随机移动

请注意,有多种方法可以随机化模板。从这个角度来看-

编辑#2-不确定是否清晰,但您的代码正在其余元素上循环;不是弹出的元素。

编辑#3-离线讨论后

原来JS正在向PHP脚本发起第二个请求(在后台),该请求正在减少会话中存储的模板

具体地说,是在图像上循环的预加载程序启动了对index.php的额外请求

img = document.images;
jax = img.length;

for(var i=0; i<jax; i++) {
    console.log(img[i].src);
} 
编辑#1-使其在每次加载页面时都随机移动

请注意,有多种方法可以随机化模板。从这个角度来看-


编辑#2-不确定是否清晰,但您的代码正在其余元素上循环;不是弹出的元素。

您知道
array\u pop()
更改了原始数组,对吗?它返回值并将其从数组中删除。您需要显示什么不起作用,以及您认为它是如何弹出2和/或某些调试的。@Abracadver我更新了我的代码以使您更好地理解。请注意,代码很好,这只发生在一些模板上,我需要如何识别问题的帮助。您知道
array\u pop()
会更改原始数组,对吗?它返回值并将其从数组中删除。您需要显示什么不起作用,以及您认为它是如何弹出2和/或某些调试的。@Abracadver我更新了我的代码以使您更好地理解。请注意,代码很好,这只发生在一些模板上,我需要如何识别问题的帮助。我尝试过这种方法,但模板是静态的,每次重新加载时不会弹出,模板也不会洗牌,这是因为会话为空时,您只在第一次页面加载时进行洗牌。在随后的页面加载中,会话已经设置好,因此它不会进入您的
if
语句。我将编辑我的答案,使其在每次页面加载时都
洗牌。是的,我在代码中注意到,当数组为空时。例如,当所有模板都弹出时,它弹出1个元素。**而不是弹出2个元素。始终仅移除/弹出1个元素。当您第一次开始时,它将从3中删除1,留下2,然后您将循环剩下的2个元素。然后你重新加载,它从2中删除了1,剩下1。。。等等不确定是否清晰,但您的代码正在**剩余元素上循环;不是弹出的元素。我尝试了这个方法,但是模板是静态的,每次重新加载时不会弹出,模板也不会洗牌,这是因为会话为空时,您只在第一次页面加载时执行
shuffle
。在随后的页面加载中,会话已经设置好,因此它不会进入您的
if
语句。我将编辑我的答案,使其在每次页面加载时都
洗牌。是的,我在代码中注意到,当数组为空时。例如,当所有模板都弹出时,它弹出1个元素。**而不是弹出2个元素。始终仅移除/弹出1个元素。当您第一次开始时,它将从3中删除1,留下2,然后您将循环剩下的2个元素。然后你重新加载,它从2中删除了1,剩下1。。。等等不确定是否清晰,但您的代码正在**剩余元素上循环;不是弹出的元素。
session_start();
$templates = array("t1.php","t2.php","t3.php"); #list of templates paths

// Commented out the if statement so it shuffles on each page load.
//if (!isset($_SESSION['templates']) || empty($_SESSION['templates'])) {
shuffle($templates); #shuffle them
$_SESSION['templates'] = $templates; #store them in sesssion
//}

$currentTemplate = end((array_values($_SESSION['templates'])));

var_dump($currentTemplate);