PHP - 使用Mongo Insert的数字键创建Json

时间:2012-05-25 14:22:08

标签: php json mongodb mongodb-php

目前我正在尝试使用我的密钥插入Mongo来模拟一天中的小时数,并且我在这些行(简化)设置中有一些东西:

for($i=0;$i<23;$i++){
    $returnElement["hours"]["$i"] = array();
    foreach($this->list_of_daily_usage_items as $item){
      /* @var $item DailyUsageItem */
      $returnElement["hours"]["$i"][$item->getLabel()] = $item->getDefaultValue();
    }
  }

有了这个我正在创造类似于:

的东西
 [hours] => Array
    (
        [0] => Array
            (
                [labelOne] => 0
                [labelTwo] => 0
            )
        ....
        [23] => Array
            (
                [labelOne] => 0
                [labelTwo] => 0
            )

    )

然而,当我推送到JSON时,它将其转换为:

"hours": [{
    "labelOne": 0,
    "labelTwo": 0,
}, {
    "labelOne": 0,
    "labelTwo": 0,
}]

通常我会期待;但是,当我试图制作这些数字键时,它并不是我希望看到的......

有没有办法在数字上加上像_之类的东西来强制它到一个字符串?

谢谢

1 个答案:

答案 0 :(得分:2)

您可以添加临时元素以强制将PHP数组转换为JSON对象

 array("_" => "removeme",
    0 => array("hello" => 0,
           "hell0" => 2),
    1 => array("hello" => 0,
           "hell0" => 2),
    2 => array("hello" => 0,
           "hell0" => 2));

这将生成

{
    "_": "removeme",
    "0": {
        "hello": 0,
        "hell0": 2
    },
    "1": {
        "hello": 0,
        "hell0": 2
    },
    "2": {
        "hello": 0,
        "hell0": 2
    }
}

如果我们将它与neato regexp相结合,我们只是讨厌过去的PHP有点邪恶的类型系统:

$finejson = preg_replace("/\"_\":\".*\",/", "", $json);

给了我们这个:

{
    "0": {
        "hello": 0,
        "hell0": 2
    },
    "1": {
        "hello": 0,
        "hell0": 2
    },
    "2": {
        "hello": 0,
        "hell0": 2
    }
}