1

目前,我正在尝试使用插入 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,
}]

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

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

谢谢

4

1 回答 1

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
    }
}

如果我们将它与一个整洁的正则表达式结合起来,我们只会让我们过去 PHP 有点邪恶的类型系统:

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

这给了我们这个:

{
    "0": {
        "hello": 0,
        "hell0": 2
    },
    "1": {
        "hello": 0,
        "hell0": 2
    },
    "2": {
        "hello": 0,
        "hell0": 2
    }
}
于 2012-05-25T14:33:37.117 回答