好吧,也许这是因为我已经编码了超过 24 小时,我的眼睛已经呆滞了,但我在这里被难住了。为什么会这样:
<?php session_start(); $tmp = "索引"; 回声“A:”。$_SESSION['page_loaded']['index']; // 返回 1 回声“B:”。$_SESSION['page_loaded'][$tmp]; // 已设置,但为空 ?>
我觉得我在这里遗漏了一些非常基本的东西,但我不知道是什么。
好吧,也许这是因为我已经编码了超过 24 小时,我的眼睛已经呆滞了,但我在这里被难住了。为什么会这样:
<?php session_start(); $tmp = "索引"; 回声“A:”。$_SESSION['page_loaded']['index']; // 返回 1 回声“B:”。$_SESSION['page_loaded'][$tmp]; // 已设置,但为空 ?>
我觉得我在这里遗漏了一些非常基本的东西,但我不知道是什么。
我有一种感觉,您实际上并没有剪切和粘贴该代码?你有什么要漏掉的吗?
您在哪里设置以下内容?
$_SESSION['page_loaded'][$tmp];
以下作品:
<?php
session_start();
$tmp = "index";
$_SESSION["page_loaded"][$tmp] = "Foo";
echo "A: " . $_SESSION['page_loaded']["index"]; // foo
echo "<br/>";
echo "B: " . $_SESSION['page_loaded'][$tmp]; // foo
?>
var_dump
用函数试试看它的价值。
尝试使用:
$tmp = 'index'; // Note the single quotes.
//...
echo "B: " . $_SESSION['page_loaded'][$tmp];
PHP 对双引号和单引号字符串的解释略有不同。在此处和此处阅读这些文章,因为这可能就是您所面临的。
更新:只是为了澄清(给出下面的评论)我检查使用单引号或双引号字符串是否影响原始海报问题的理由如下面的示例所示,其中两个字符串不相等:
$var = 1;
$tmpA = 'index_$var'; // will resolve to index_$var
$tmpB = "index_$var"; // will resolve to index_1
if ( $tmpA === $tmpB)
echo 'Identical';
else
echo 'Not Identical!'; // <--- we get this because they are NOT identical.
你应该使用
$_SESSION['page_loaded']['tmp'] = "index";
代替
$tmp = "index";
并检索值使用这个
echo "B: " . $_SESSION['page_loaded']['tmp']; // the output is: B: index
(去掉美元符号 $)