重新开放:
由于 PHP 是一种服务器端语言,我假设我使用的浏览器并不重要,但显然并非如此。我一直在使用谷歌浏览器。
我在本地机器上安装了 WAMP,因此我可以在本地对其进行测试,看看它是否与我的共享主机帐户一样。两种代码都按应有的方式工作(在 Chrome 中提醒您)。然后我查看了共享主机上完全相同的代码——一个有效,另一个无效。
我打电话给我的共享托管支持,他们试图复制这个问题并说他们没有找到它。因此,我在 Firefox 和 IE 中尝试了它,并且在 IE 中尝试了它,你瞧……它在两者中都能完美运行,就像在 WAMP 上一样。
这对我来说仍然没有多大意义。我在一家知名托管公司的共享托管帐户上使用 PHP 5.3,但由于他们无法真正解决代码问题,因此无处可去。他们可以复制问题,但无法回答原因。我将在接下来的几周内尝试了解更多信息,并在我了解更多信息后发布更新。
我想要做的是:
- 生成一系列数字
- 将它们随机排列
- 将该随机排序的数字数组复制到会话数组中
- 获取数组的第一个值,删除该值,并将所有值下移一个
这是我的问题:
我尝试使用array_shift();
它,它在第一次运行时运行良好,但每次运行代码后它都会删除前两个元素。
为了测试发生了什么,我尝试先打印数组,执行array_shift();
,然后再次打印数组以查看发生了什么。
预期成绩:
运行#1:
[0]=>5 [1]=>2 [2]=>1 [3]=>4 [4]=>3 //print_r($array);
//execute array_shift($array);
[0]=>2 [1]=>1 [2]=>4 [3]=>3 //print_r($array);
运行#2:
[0]=>2 [1]=>1 [2]=>4 [3]=>3 //print_r($array);
//execute array_shift($array);
[0]=>1 [1]=>4 [2]=>3 //print_r($array);
实际结果:
运行#1:
[0]=>5 [1]=>2 [2]=>1 [3]=>4 [4]=>3 //print_r($array);
//execute array_shift($array);
[0]=>2 [1]=>1 [2]=>4 [3]=>3 //print_r($array);
运行#2:
[0]=>1 [1]=>4 [2]=>3 //print_r($array);
//execute array_shift($array);
[0]=>4 [1]=>3 //print_r($array);
我的问题(续)
因此,我尝试使用reset($array);
,unset($array[0]);
和array_splice($array,1,0);
作为 array_shift($array); 的替代方法 它奏效了!然后我尝试并排比较它们并清理代码,现在它们正在做相反的事情。有时reset、unset和array_shift;一次调用时甚至会跳过数组中的最多 7 个单元格。array_shift();
正在按照我现在想要的方式工作,但我想知道为什么。快把我逼疯了!如果有人可以请帮助我,我将不胜感激。
代码转储:
未设置、重置、拼接
<?php
session_start();
$min = A;
$max = S;
if((!isset($_SESSION['image'])) || ($_SESSION['image'] == null))
{
$numbers = range($min, $max); //set a range for all images
shuffle($numbers); //shuffle the order for randomness
$_SESSION['image'] = $numbers;
echo "<br />Current value: " . $_SESSION['image'][0] . "<br />";
print_r($_SESSION['image']);
reset($_SESSION['image']);
unset($_SESSION['image'][0]);
array_splice($_SESSION['image'],1,0);
echo "<br />New value: " . $_SESSION['image'][0] . "<br />";
echo "<br />1st exec<br />";
}
else
{
echo "<br />Current value: " . $_SESSION['image'][0] . "<br />";
print_r($_SESSION['image']);
reset($_SESSION['image']);
unset($_SESSION['image'][0]);
array_splice($_SESSION['image'],1,0);
echo "<br />New value: " . $_SESSION['image'][0] . "<br />";
echo "<br />2nd exec<br />";
}
?>
转移
<?php
session_start();
$min = A;
$max = S;
if((!isset($_SESSION['id2'])) || ($_SESSION['id2'] == null))
{
$numbers = range($min, $max); //set a range for all images
shuffle($numbers); //shuffle the order for randomness
$_SESSION['id2'] = $numbers;
echo "<br />Current value: " . $_SESSION['id2'][0] . "<br />";
print_r($_SESSION['id2']);
array_shift($_SESSION['id2']);
echo "<br />New value: " . $_SESSION['id2'][0] . "<br />";
echo "<br />1st execution<br />";
}
else
{
echo "<br />Current value: " . $_SESSION['id2'][0] . "<br />";
print_r($_SESSION['id2']);
array_shift($_SESSION['id2']);
echo "<br />New value: " . $_SESSION['id2'][0] . "<br />";
echo "<br />2nd execution<br />";
}
?>