我有一个外部数组,里面有2个元素。 2个元素中的每一个都是一个数组。所以它是一个二维数组。
以下是数组的创建方式:
$outerArray = array();
$nestedArray = array("first", "second", "third", "fourth");
$outerArray[] = $nestedArray;
$nestedArray_2 = array("first", "second", "third", "fourth");
$outerArray[] = $nestedArray_2;
然后我按如下方式存储这个数组:
$jsonArray = json_encode($outerArray);
// USE 'echo' TO PUT THIS array INTO A HIDDEN input FIELD ON THE PAGE
echo "document.getElementById('jsonArray').value = $jsonArray;";
// LETS ECHO THE NESTED ARRAY TO VERIFY IT WAS CONSTRUCTED CORRECTLY
echo $jsonArray;
这是HTML隐藏元素' jsonArray'在我的档案中:
<input type="hidden" id="jsonArray" />
我在上面做的那个回声向我展示了数组看起来像这样:
[["first","second","third","fourth"],["first","second","third","fourth"]]
这一切都很好。现在很清楚,隐藏的输入字段中存储了一个有效的2D json数组。
然后我用数组执行以下操作 - 我将它存储在会话中,重定向到另一个文件,然后提取然后回显2D数组:
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
// SEE NOTE #1 BELOW ABOUT WHAT THIS SHOWS IN THE ALERT() BOX
alert("The xmlhttp.responseText is: " + xmlhttp.responseText);
window.location = "theViewer.php";
}
}
var arg = "theStored2dimensionArrayAsJson="
+ document.getElementById('jsonArray').value;
xmlhttp.open("POST", "handler.php", true);
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp.send(arg);
这样做,它将json编码的二维数组发送到handler.php。而且所有handler.php都在$ _SESSION中保存json编码的二维数组:
// in handler.php
$_SESSION['jsonEncoded2D_Array'] = $_POST['theStored2dimensionArrayAsJson'];
// echo out the array so it appears in the xmlhttp.responseText
echo $_POST['theStored2dimensionArrayAsJson'];
// NOTE #1 -- THIS IS WHAT IS DISPLAYED IN THE xmlhttp.responseText
handler.php, the jsonEncoded2D_Array is:
first,second,third,fourth,first,second,third,fourth
在alert()框中显示xmlhttp.responseText后,我重定向到theViewer.php。 我从SESSION中检索2D数组并将其回显:
// INSIDE theViewer.php
$jsonified_2D_Array = $_SESSION['jsonEncoded2D_Array'];
但是,当我回应出“阵列”时,我刚刚从SESSION中检索到,它现在是一个字符串,而不是一个数组:
// THE echo SHOWS THE 2D ARRAY HAS BEEN COVERTED TO A TEXT STRING
// AND IS NO LONGER AN ARRAY
echo "Okay, here is the 2D array:<br />" . $jsonified_2D_Array;
上面回声的输出是:
Okay, here is the 2D array:
first,second,third,fourth,first,second,third,fourth
我不明白。如果你看一下上面的代码,我将它放入一个隐藏的输入字段后回显这个数组,它看起来像正确,就像一个2D数组。这是之后我将其转换为JSON。
然后我从该隐藏字段中取出JSON-ified 2D数组,将其通过Ajax传递给handler.php以便保存在SESSION中,然后将其从theViewer.php中的SESSION中取回 - 和它不再是二维数组 - 它现在只是一个文本字符串。
我需要将这个2D数组保持为2D数组而不是字符串。
这可能吗?我需要 theViewer.php中的2D数组(不是字符串化数组)。
我在theViewer.php中的字符串化数组上尝试了JSON.parse()和eval(),它停止了代码执行,但没有帮助。
答案 0 :(得分:0)
$asd = '[["first","second","third","fourth"],["first","second","third","fourth"]]';
var_dump(json_decode($asd));
输出
array(2) {
[0]=> array(4) {
[0]=>
string(5) "first"
[1]=>
string(6) "second"
[2]=>
string(5) "third"
[3]=>
string(6) "fourth"
}
[1]=> array(4) {
[0]=>
string(5) "first"
[1]=>
string(6) "second"
[2]=>
string(5) "third"
[3]=>
string(6) "fourth"
}
}
所以json_decode()就是答案
编辑:所以答案就是把它包装在这样的引号里面
echo "document.getElementById('jsonArray').value = \'$jsonArray\';";
所以ajax会将其视为字符串,不会删除括号。