【发布时间】:2016-09-25 14:29:47
【问题描述】:
我可能可以找到解决这个问题的方法,但我真的很想了解是什么语言结构导致了它。
逻辑如下,我想在用户点击谷歌地图上的路线时建立一个会话变量,该路线是一个航点数组。 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 的正确值是 output = 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(),但您没有向我们展示吗? -
是的,很抱歉我漏掉了。我现在添加