PHP向JSON添加了不必要的索引

PHP向JSON添加了不必要的索引,php,json,mongodb,Php,Json,Mongodb,我在MongoDB集合中存储了以下JSON: { "_id" : ObjectId("bbbbbaaaaaaaaaaaaa998a50"), "client" : "1", "services" : [ { "minutes" : 30, "label" : "Service 30" }, {

我在MongoDB集合中存储了以下JSON:

{
    "_id" : ObjectId("bbbbbaaaaaaaaaaaaa998a50"),
    "client" : "1",
    "services" : [ 
            {
                    "minutes" : 30,
                    "label" : "Service 30"
            }, 
            {
                    "minutes" : 60,
                    "label" : "Service 60"
            }
    ],
    "status" : "Active",
    "lastModifiedOn" : ISODate("2016-01-14T12:17:08.780Z"),
    "createdOn" : ISODate("2016-01-14T12:17:08.780Z"),
// ...
}

我只是将某些值传递给网站:

$catalog['services'] = $databaseCatalog->services;
$catalog['status'] = $databaseCatalog->status;
使用以下内容作为JSON传递:

var catalog = <?php echo json_encode($catalog) ?>;
问题:该索引(“0”、“1”)从何而来,如何防止发生?

请求的var转储:

array (size=1)
    'services' => 
        object(MongoDB\Model\BSONArray)[47]
            public 0 => 
            object(MongoDB\Model\BSONDocument)[40]
                public 'minutes' => int 30
                public 'label' => string 'Service 30' (length=10)
            public 1 => 
            object(MongoDB\Model\BSONDocument)[41]
                public 'minutes' => int 60
                public 'label' => string 'Service 60' (length=10)

问题的原因是MongoDB提供了一个对象,一旦映射到数组,该对象就会生成索引

解决方案是使用以下方法:

$catalog['services'] = array_values((array)$databaseCatalog->services);
$catalog['status'] = array_values((array)$databaseCatalog->status);

因为服务本身就是一个数组,所以这些是键
$catalog->services
?另外,如果
$catalog
是一个对象,则不应将其视为数组:
$catalog[arrayversion]=$catalog->objectversion
应发出警告。“不能将对象用作数组”或“尝试获取非对象的属性”后var_dump($catalog)额外的索引是由于服务数组的数字索引。这有点奇怪,因为JSON_FORCE_对象没有被传递给JSON_encode,但这是一种行为。我做了一个简单的测试,工作方式与您预期的一样<代码>$str='{U id:“BBBBB AAAAAAA 998A50”,“客户端”:“1”,“服务”:[{“分钟”:30,“标签”:“服务30”},{“分钟”:60,“标签”:“服务60”}],“状态”:“活动”}$obj=json_解码($str)天哪,我刚刚花了几个小时试图找出如何轻松地将包含ArrayObject的MongoDB对象转换为PHP数组。“阵法”的演员们成功了!!!非常感谢。
$catalog['services'] = array_values((array)$databaseCatalog->services);
$catalog['status'] = array_values((array)$databaseCatalog->status);