为什么json_编码的对象最终在javascript中成为数组?

为什么json_编码的对象最终在javascript中成为数组?,javascript,php,json,Javascript,Php,Json,在我正在进行的一个项目中,我正在使用PHP将一些数据传递给javascript。在我的PHP中,我有: <?php $allprojects = $pages->find('projects')->children(); $transfer = array(); $i=0; foreach ($allprojects as $p) { $transfer[] = array(

在我正在进行的一个项目中,我正在使用PHP将一些数据传递给javascript。在我的PHP中,我有:

<?php
        $allprojects = $pages->find('projects')->children();
        $transfer = array();
        $i=0;
        foreach ($allprojects as $p) {
            $transfer[] = array(
                'i' => $i,
                'title' => $p->title()->value,
                'url' => $p->url(),
                'thumb' => thumb($p->children()->first()->images()->first(), array('width'=>170))
            );
            $i++;
        }


    ?>
    <script>
    var projects = <?php print json_encode($transfer); ?>
    </script>

我有点不明白为什么会这样。有人能解释一下情况吗?

JSON是一种数据交换格式,用于将对象或对象列表表示为字符串。在您的例子中,您正在使用该格式将列表(特别是一个数组)
$transfer[]
从运行PHP的服务器端交换到客户端的Javascript

如果在浏览器中查看生成的HTML源代码,您将看到以下行:

var projects = <?php print json_encode($transfer); ?>
因此,就JavaScript而言,这一行将
项目定义为对象(使用
{}
)的数组(使用
[]
)。因此,您已经成功地使用该格式将启动时使用的对象数组从服务器交换到客户端

如果您想将其JSON格式再次输入客户端的变量中,或许为了以某种方式将其传递回服务器,您可以使用:

var projectsJSON = JSON.stringify(projects);

你在定义一个数组,你在问为什么它是数组?@PeeHaa恕我直言,这种反应非常令人讨厌、傲慢和居高临下。至少如果你想侮辱别人,请附上一些信息来帮助我解决困惑。@fraxture:code
$transfer[]=…
是对数组进行数字递增,因此外部数组(
$transfer
本身)是数字的。
投影[0]instanceof array==false
[…]
表示一个数组。正如已经指出的,请看一看。第一个图表描述对象(
{string:value,…}
)的语法,第二个图表描述数组(
[value,…]
)的语法。与大多数编程语言一样,对于数组/列表,索引不必显式指定,因为它们已经在元素的位置编码。非常有用的解释@stovroz。谢谢
var projects = [{i: 1, title: "Example", url: "www.example.com", thumb: "example.jpg" }];
var projectsJSON = JSON.stringify(projects);