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);