我可能找到一种方法来解决我遇到的这个问题,但真的想了解什么语言构造造成它。构建一个数组给PHP未定义的偏移:0
逻辑如下,我想建立一个会话变量,因为用户点击Google地图上的一个路线点阵列。该POST分组是JSON对象:
?waypoint={"waypoint":[{"lat":"23.3","long":"145"}]}
接受POST和解释的代码是:
<?php
session_start();
//session_destroy();
//die;
//$waypoints[] = array(); <<== uncomment this and the behaviour changes
if (isset ($_GET ['waypoint'])) {
$waypoint = $_GET ['waypoint'];
$waypoint = json_decode($waypoint,true);
print_r($waypoint['waypoint']); <<<========output 1
if (isset ($_SESSION ['waypoints'])) {
$waypoints = $_SESSION ['waypoints'];
$waypoints [] = $waypoint['waypoint'];
$_SESSION ['waypoints']=$waypoints;
} else {
$_SESSION ['waypoints'] = $waypoint['waypoint'];
$waypoints[] = $waypoint['waypoint'];
}
}
foreach($_SESSION ['waypoints'] as $var) {
var_dump($var); <<<<====== Output 2
echo($var[0]['lat']); <<<<==== Here is the problem.
};
?>
这是问题所在。第一次通过,输出1和2下面提供的输出和用于LAT被输出的正确的值= 23.3
**Output 1:** Array ([0] => Array ([lat] => 23.3 [long] => 145))
-------------------------------------------------------
**Output 2:**
array (size=1)
0 =>
array (size=2)
'lat' => string '23.3' (length=4)
'long' => string '145' (length=3)
第二呼叫,产生一个错误Notice: Undefined offset: 0
和随后的调用都很好,也就是该阵列按预期建立。现在,如果我取消声明waypoints[] = array();
它在第一阶段炸弹,但随后所有的运行都没问题。
有人能解释这种行为吗?
谢谢
我们可以假设你确实在这段代码中有一个'session_start()',你没有向我们展示过吗? – RiggsFolly
是的,对不起,我把它遗漏了。我现在将添加 – TrueBlue