PHP:将数字设置为关联数组中的键

3

我正在尝试从数据库中重新创建JSON,用于客户端。不幸的是,JSON中的一些键是数字,在JavaScript中可以正常工作,但由于这个原因,PHP会将它们视为数字而不是关联数组。每个键都代表一个文档。让我给你展示:

PHP:

  $jsonobj;
  while ($row = mysql_fetch_assoc($ms)) {

            $key = strval($row["localcardid"]);
            $jsonobj[$key] = json_decode($row["json"]);
    }
    // $jsonobj ist still a numeric array
    echo json_encode($jsonobj);

生成的 JSON 应该是这样的:
{
  "0": {
    "terd": "10",
    "id": 0,
    "text": "",
    "pos": 1,
    "type": 0,
    "divs": [
        {},
        {}
    ],
    "front": 1
 }
"1": {
     "terd": "10",
    "id": 0,
    "text": "",
    "pos": 1,
    "type": 0,
    "divs": [
        {},
        {}
    ],
    "front": 1
  }
}

一种显而易见的解决方案是将整个JSON保存而不拆分它。然而,就数据库而言,这似乎不明智。我想能够单独访问每个文档。使用…
 $jsonobj = array ($key => json_decode($row["json"]));

显然有效,但不幸的是只适用于一个键... 编辑:为了澄清* 在PHP中:有一些区别。
array("a", "b", "c")      

并且

   array ("1" => "a", "2" => "b", "3" => "c").

后者,如果像这样做$array["1"] = "a",结果是array("a")而不是array("1" => "a")

这里回答了

4个回答

2
我相信如果你使用JSON_FORCE_OBJECT选项,则应该可以按照您想要的方式输出带有数字索引的对象:
$obj = json_encode($jsonObj, JSON_FORCE_OBJECT);

例子:

$array = array();

$array[0] = array('test' => 'yes', 'div' => 'first', 'span' => 'no');
$array[1] = array('test' => 'no', 'div' => 'second', 'span' => 'no');
$array[2] = array('test' => 'maybe', 'div' => 'third', 'span' => 'yes');

$obj = json_encode($array, JSON_FORCE_OBJECT);
echo $obj;

输出:

{
    "0": {
        "test": "yes",
        "div": "first",
        "span": "no"
    },
    "1": {
        "test": "no",
        "div": "second",
        "span": "no"
    },
    "2": {
        "test": "maybe",
        "div": "third",
        "span": "yes"
    }
}

2

尝试

echo json_encode((object)$jsonobj);

谢谢,那在我的情况下起作用了!不过你有什么想法如何将数字设置为关联数组的键吗? - jcfrei
嗯...我不明白。看起来你正在做那件事。 - Vatev
еңЁ PHP дёӯпјҡarray("a", "b", "c") е’Ң array ("1" => "a", "2" => "b", "3" => "c") д№Ӣй—ҙеӯҳеңЁе·®ејӮгҖӮеҪ“еғҸиҝҷж · $array["1"] = "a" иҝӣиЎҢж“ҚдҪңж—¶пјҢеҗҺиҖ…зҡ„з»“жһңжҳҜ array("a") иҖҢдёҚжҳҜ array("1" => "a")гҖӮ - jcfrei
1
看起来似乎不可能。请参阅此问题 - Vatev

0

只需将两者都保存在数据库的单个条目中:将分离的字段值和整个JSON结构分别保存在不同的列中。这样,您可以按单个字段搜索并仍然获取有效的JSON结构以便于处理。


0

如果我们想在关联数组中设置一个数字作为键,可以使用以下代码

$arr=array(); //declare array variable
$arr[121]='Item1';//assign Value
$arr[457]='Item2';
.
.
.
print_r($arr);//print value

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接