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



代码没有错,它工作正常,但在某些模板上没有。

以下是它的工作原理:

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

这里的问题是,在某些模板上,array_pop函数在页面重新加载时弹出数组的 2 个元素(包含的模板 + 另一个(。

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

我需要一些帮助来识别这个问题。

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 />';
}

不重新加载

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

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

重新加载 1:

在某些模板上,我的代码工作正常,我重复一遍。我不知道发生了什么:)

编辑 #3 - 离线讨论后

事实证明,JS正在向PHP脚本发起第二个请求(在后台(,该请求正在减少会话中存储的模板。

具体来说,是预加载器循环图像,发起了额外的索引.php请求。

img = document.images;
jax = img.length;
for(var i=0; i<jax; i++) {
console.log(img[i].src);
} 

11:38:39.711 VM322:5 http://plrtesting.herokuapp.com/index.php **这个

11:38:39.711 VM322:5 https://i.stack.imgur.com/TtQqE.gif

结束编辑

代码正在做你告诉它做的事情。

$currentTemplate = array_pop($_SESSION['templates']);

您正在删除(而不是检索(最终元素并将其分配给变量。每次重新加载页面时,它都会popping数组中的 1 个元素。这就是为什么你看到它随着时间的推移而减少。

您需要改为检索它。如果你想要最后一个元素,那么:

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 = end((array_values($_SESSION['templates'])));

编辑#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);

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

相关内容

  • 没有找到相关文章

最新更新