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


PHP adds unecessary index to JSON

我有以下JSON存储在MongoDB集合:

{
    "_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) ?>;

这会导致非预期的索引:

var catalog = {"services":{"0":{"minutes":30,"label":"Service 30"}, ,"1":{"minutes":60,"label":"...

问题:这个索引("0","1")是从哪里来的,我如何防止这种情况发生?

请求的var dump:

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);