【问题标题】:Why can't I set zero as the first key in the array?为什么我不能将零设置为数组中的第一个键?
【发布时间】:2011-01-13 06:40:55
【问题描述】:

这段代码的结果:

for($i = 0; $i <= 7; $i++){

    $eachone[] = array ('a' => '1', 'b' => '2', 'c' => '3');

$a[] = array($i => $eachone);

unset($eachone);

}

$json_string = json_encode($a);
echo $json_string;

是:

[
    [
        [
            {
                "a": "1",
                "b": "2",
                "c": "3"
            }
        ]
    ],
    {
        "1": [
            {
                "a": "1",
                "b": "2",
                "c": "3"
            }
        ]
    },
    {
        "2": [
            {
                "a": "1",
                "b": "2",
                "c": "3"
            }
        ]
    },
    {
        "3": [
            {
                "a": "1",
                "b": "2",
                "c": "3"
            }
        ]
    },
    {
        "4": [
            {
                "a": "1",
                "b": "2",
                "c": "3"
            }
        ]
    },
    {
        "5": [
            {
                "a": "1",
                "b": "2",
                "c": "3"
            }
        ]
    },
    {
        "6": [
            {
                "a": "1",
                "b": "2",
                "c": "3"
            }
        ]
    },
    {
        "7": [
            {
                "a": "1",
                "b": "2",
                "c": "3"
            }
        ]
    }
]

你能注意到它是如何跳过第一个数字,即零吗?问题是:为什么?

【问题讨论】:

  • 你用的是什么版本的PHP?
  • 我可以在 5.3.0 上复制它。问题在于 json_encode — print_r'ing $a 数组表明它已正确索引。
  • 嗯。我可以在 PHP 5.1.6 上复制它。谷歌搜索似乎一无所获,也就是说没有直接的搜索词。 +1。
  • 您使用的是 PHP 5.1.6!??!该死的更新你的服务器!

标签: php json arrays


【解决方案1】:

你没有索引你的数组

for($i = 0; $i <= 7; $i++)
{

    $eachone[$i] = array ('a' => '1', 'b' => '2', 'c' => '3');

$a[$i] = array($i => $eachone);

unset($eachone);

}

$json_string = json_encode($a);
echo $json_string;

**编辑:**在我的笔记本电脑上,如果我执行 print_r($a);我得到这个数组:它设置为零

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [a] => 1
                            [b] => 2
                            [c] => 3
                        )

                )

        )

    [1] => Array
        (
            [1] => Array
                (
                    [0] => Array
                        (
                            [a] => 1
                            [b] => 2
                            [c] => 3
                        )

                )

        )

    [2] => Array
        (
            [2] => Array
                (
                    [0] => Array
                        (
                            [a] => 1
                            [b] => 2
                            [c] => 3
                        )

                )

        )

    [3] => Array
        (
            [3] => Array
                (
                    [0] => Array
                        (
                            [a] => 1
                            [b] => 2
                            [c] => 3
                        )

                )

        )

    [4] => Array
        (
            [4] => Array
                (
                    [0] => Array
                        (
                            [a] => 1
                            [b] => 2
                            [c] => 3
                        )

                )

        )

    [5] => Array
        (
            [5] => Array
                (
                    [0] => Array
                        (
                            [a] => 1
                            [b] => 2
                            [c] => 3
                        )

                )

        )

    [6] => Array
        (
            [6] => Array
                (
                    [0] => Array
                        (
                            [a] => 1
                            [b] => 2
                            [c] => 3
                        )

                )

        )

    [7] => Array
        (
            [7] => Array
                (
                    [0] => Array
                        (
                            [a] => 1
                            [b] => 2
                            [c] => 3
                        )

                )

        )

)

【讨论】:

  • 技术上应该没有必要。 [] 语法应该自动增加索引(显然从 0 开始)。如果 $a 已经有项目并且他的 for 循环只是添加到它们,那么您的将无法正常工作。
【解决方案2】:

你想要 json_encode($a, JSON_FORCE_OBJECT)。不幸的是,它只在 5.3 中添加。

【讨论】:

  • 另外,这里有一个更简单的测试用例: php -r 'var_dump(json_encode(array(array(0 => 0), array(1 => 1))));'字符串(13) "[[0],{"1":1}]"
  • 我什至无法测试它,因为 Rackspace Cloud Sites 在 5.2.6 时卡住了。我会尝试解决这个 json_encode 问题。
  • 很好,我设法从对象而不是数组中正确使用 json_encode。问题是它到处输出字符串,而不是像我在某些情况下需要的整数,但我稍后会处理。谢谢!
【解决方案3】:

这是一个 hack,但您可以在前面添加一个虚拟元素。

$a = array('dummy'=>1);
for($i = 0; $i <= 7; $i++) {
  ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2017-10-31
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多