PHP通过添加键来索引我的数组,但我不希望它?

时间:2013-10-05 00:00:11

标签: php arrays

我目前有一个这样的数组(问题中的所有数组都是JSON格式):

{
    "array":[
        "item",
        "item2",
        "item3"

       //etc..

    ]
}

我使用['array'][] = array("x"=>"y","z"=>"a");

向此数组添加数组

现在我的数组看起来像这样:

{
    "array":{
        "0":"item",
        "1":"item2",
        "2":"item3",
        "newItem": {
            "x":"y",
            "z":"a"
        }

       //etc..

    }
}

如何从数组中删除“0”和“1”,所以我只是这个?:

{
    "array":[
        "item",
        "item2",
        "item3",
        "newItem": {
            "x":"y",
            "z":"a"
        }

       //etc..

    ]
}

2 个答案:

答案 0 :(得分:3)

所以让我们把你原来的JSON作为输入

{
    "array":[
        "item",
        "item2",
        "item3"
    ]
}

您可以使用json_decode()将JSON数据转换为PHP。从您的数组修改代码判断,您希望true作为json_decode()的第二个参数

$data = json_decode("{\"array\":[\"item\",\"item2\",\"item3\"]}", true);

然后您可以添加数据

$data['array'][] = array("x"=>"y","z"=>"a");

现在,您可以使用json_encode()将PHP数据再次转换为JSON

echo json_encode($data);

这将打印

{
    "array":[
        "item",
        "item2",
        "item3",
        {
            "x":"y",
            "z":"a"
        }
    ]
}

您也可以将JSON_FORCE_OBJECT作为第二个参数传递给json_encode(),以强制将数组转换为对象,从而创建键

echo json_encode($data, JSON_FORCE_OBJECT);

此替代电话会打印出来

{
    "array":{
        "0":"item",
        "1":"item2",
        "2":"item3",
        "3":{
            "x":"y",
            "z":"a"
        }
    }
}

注意,没有JSON_FORCE_OBJECT的调用没有数组索引,而你的JSON数据有它们。原因在于您修改数据的方式不同。您可能使用以下代码

$data['array']['newItem'] = array("x"=>"y","z"=>"a");

通过为这个新项提供密钥,它必须在JSON中表示为一个对象。该数组现在包含一个对象,所有其他项也被提升为对象。

要解决您的问题,您应该像这样修改数据

$data['array'][] = array('newItem' => array("x"=>"y","z"=>"a"));

这会给你

{
    "array":[
        "item",
        "item2",
        "item3",
        {
            "newItem":{
                "x":"y",
                "z":"a"
            }
        }
    ]
}

答案 1 :(得分:0)

我认为你没有没有密钥的PHP数组,我认为没有密钥就可以拥有JSON。如果您没有指定http://php.net/manual/en/language.types.array.php,PHP将始终添加密钥。

“我目前有这样的数组”是什么意思?你的JSON看起来像这样吗?它有效吗?