1

現在、Mongo に挿入するキーを使用して 1 日の時間をシミュレートしようとしていますが、次のような (簡略化された) セットアップがあります。

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

これを nato regexp と組み合わせると、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 に答える