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

时间:2014-02-03 06:10:32

标签: javascript php arrays multidimensional-array json

我很困惑,无法弄清楚为什么这个JSON目标代码不会像我认为的那样出现。

由于对theis示例不重要的原因,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

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

2 个答案:

答案 0 :(得分:2)

您正在拨打json_encode两次:

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

你必须在第一次调用中使用JSON_FORCE_OBJECT - 选项,之后$json_array已经是一个字符串,JSON_FORCE_OBJECT在那里没有效果。

当然,带有双重编码的结果变量JSFileList也将是一个字符串,当你需要在JS中访问该对象时,它只编码一次(document.write然后会打印像{ {1}})。

答案 1 :(得分:0)

[{...},{...},{...}]

这是一个对象数组。您可以通过数字数组索引访问单个对象,例如JSFileList[2].FileName。它已经按你的需要工作了。

Javascript区分连续数字索引的数组([])和关联对象({}),PHP则不然。 json_encode将所有连续数字索引的PHP数组编码为Javascript数组,以及其他任何对象。