javascript - PHP 多维关联数组到 JS 对象使用 json_encode()

标签 javascript php arrays multidimensional-array json

我很困惑,无法弄清楚为什么这个 JSON 对象代码没有像我认为的那样出现。

出于对本示例不重要的原因,PHP 数组是从另一个数组创建的。作为 PHP 数组,这工作正常。

for($i=0;$i<$FileCount;$i++)
{
    $FileList[$i] = array
    (
        "Category" => $Category, "FileName" => $FileName, "Ext" => $Ext, "Title" => $Title, "ShortName" => $ShortName
    );
}

print_r($FileList);
Array ( [0] => Array ( [Category] => AntiqueGlass [FileName] => AntiqueGlass-BlackGlassBox-B [Ext] => jpg [Title] => BlackGlassBox [ShortName] => AntiqueGlass-BlackGlassBox ) [1] => Array ( [Category] => AntiqueGlass [FileName] => AntiqueGlass-BluePicture-B [Ext] => jpg [Title] => BluePicture [ShortName] => AntiqueGlass-BluePicture ) )

然后我这样做,下面显示了写入的结果

$json_array=json_encode($FileList);
echo('
<script type="text/javascript">
    var JSFileList = '.json_encode($json_array, JSON_FORCE_OBJECT).';
    document.write(JSFileList);
</script>'."\n");

[{"Category":"AntiqueGlass","FileName":"AntiqueGlass-BlackGlassBox-B","Ext":"jpg","Title":"BlackGlassBox","ShortName":"AntiqueGlass-BlackGlassBox"},{"Category":"AntiqueGlass","FileName":"AntiqueGlass-BluePicture-B","Ext":"jpg","Title":"BluePicture","ShortName":"AntiqueGlass-BluePicture"}]

我相信结果应该是这样的

{"0":("Category":"AntiqueGlass","FileName":"AntiqueGlass-BlackGlassBox-B","Ext":"jpg","Title":"BlackGlassBox","ShortName":"AntiqueGlass-BlackGlassBox")},{"1":("Category":"AntiqueGlass","FileName":"AntiqueGlass-BluePicture-B","Ext":"jpg","Title":"BluePicture","ShortName":"AntiqueGlass-BluePicture")}

目的是像这样访问对象

JSFileList[i].FileName

我所有的研究都表明这应该有效。我不知道自己做错了什么。

最佳答案

你正在调用 json_encode 两次:

$json_array=json_encode($FileList);
//.....
json_encode($json_array, JSON_FORCE_OBJECT);

您必须在第一次调用时使用 JSON_FORCE_OBJECT 选项,之后 $json_array 已经是一个字符串,JSON_FORCE_OBJECT 将在那里无效。

当然双重编码后的结果变量JSFileList也是一个字符串,当你需要访问JS中的对象时只需编码1次(document.write 然后会打印类似 [object Object] 的内容。

关于javascript - PHP 多维关联数组到 JS 对象使用 json_encode(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21520816/

相关文章:

javascript - 我不明白 var foo = [true].concat(Array.prototype.slice.call(arguments)) 是如何工作的,具体来说 [true] 正在做什么?

php - 如何在 Kohana 中使 URL 中的参数名称默认并隐藏?

php - mysqli 获取数组返回 null 作为结果

android - 遍历 Parse JsonArray

arrays - 如果第二个是 Ruby 中的 != "",如何连接两个数组属性

javascript - String.format 不是函数

javascript - $(...).serializeJSON 不是函数

php - echo 输出sql JOIN?

java - 数组上的预增量如何工作

javascript - 当您向下滚动时,顶部的菜单栏(Div 元素)仍然保留