php脚本推送数据2d数组

时间:2013-04-25 09:03:19

标签: php json

我几乎将数据添加到我的文件中。但我正在尝试找出确切的语法..任何帮助高度赞赏..

我的PHP脚本

$inp = file_get_contents('jsontrail.json');

$tempArray = json_decode($inp, true);
//adding to the matchid index of matches array
$matchid=3;
$arrne['games']['matches'][$matchid]['winner'] ="winner";
$arrne['games']['matches'][$matchid]['player1id'] ="player1id";
$arrne['games']['matches'][$matchid]['player2id'] ="player2id";
array_push($tempArray,$arrne );
$jsonData = json_encode($tempArray);
file_put_contents('jsontrail.json', $jsonData);
print_r( $inp);

我有效的json文件

{
"players": [
    {
        "name": "Moldova",
        "image": "/Images/Moldova.jpg",
        "roll_over_image": "tank.jpg"
    },
    /* repeat */
],
"games": [
    {
        "matches": [
            {
                "player1id": 0,
                "player2id": 1,
                "winner": "*"
            },
            /* repeat */
        ]
    },
    {
        "matches": [
            {
                "player1id": 0,
                "player2id": 1,
                "winner": "*"
            },
            /* repeat */
        ]
    }
]
}

我正在尝试将数据添加到已存在的数组

游戏中的

- > first_match_array-> mymatch_id_input-> push_data_here。

执行后,这就是我在屏幕上的内容

{
    "players":
    [
        {
            "name":"Moldova",
            "image":"\/Images\/Moldova.jpg",
            "roll_over_image":"tank.jpg"
        },
        /* repeat */
    ]
    ,
    "games":
    [
        {
            "matches":
            [
                {
                    "player1id":0,
                    "player2id":1,
                    "winner":"*"
                },
                /* repeat */
            ]
        },
        {
            "matches":
            [
                {
                    "player1id":0,
                    "player2id":1,
                    "winner":"*"
                },
                /* repeat */
            ]
        }
    ],
    "0":
    {
        "games":
        {
            "matches":
            [
                {
                    "3":
                    {
                        "winner":"winner",
                        "player1id":"player1id",
                        "player2id":"player2id"
                    }
                }
            ]
        }
    }
}

以上是通过array_push得到的...下一个我用array_merge

获得的代码
{
    "players":
    [
        {
            "name":"Moldova",
            "image":"\/Images\/Moldova.jpg",
            "roll_over_image":"tank.jpg"
        },
        /* repeat */
    ],
    "games":
    [
        {
            "matches":
            [
                {
                    "player1id":0,
                    "player2id":1,
                    "winner":"*"
                },
                /* repeat */
            ]
        },
        {
            "matches":
            [
                {
                    "player1id":0,
                    "player2id":1,
                    "winner":"*"
                },
                /* repeat */
            ]
        }
    ],
    "0":
    {
        "games":
        {
            "matches":
            [
                {
                    "3":
                    {
                        "winner":"winner",
                        "player1id":"player1id",
                        "player2id":"player2id"
                    }
                }
            ]
        }
    },
    "1":
    {
        "games":
        {
            "matches":
            [
                {
                    "3":
                    {
                        "winner":"winner",
                        "player1id":"player1id",
                        "player2id":"player2id"
                    }
                }
            ]
        }
    }
}

请帮忙,看似简单但无法找到确切的代码来执行此操作。请帮助..

2 个答案:

答案 0 :(得分:0)

问题是你的格式错误的json字符串,它构造不正确,试试这个

$str = '{
"players": [
{
    "name": "Moldova",
    "image": "/Images/Moldova.jpg",
    "roll_over_image": "tank.jpg"
},
{
    "name": "Georgia",
    "image": "/Images/georgia.gif",
    "roll_over_image": "tank.jpg"
},
{
    "name": "Belarus",
    "image": "/Images/Belarus.gif",
    "roll_over_image": "tank.jpg"
},
{
    "name": "Armenia",
    "image": "/Images/armenia.png",
    "roll_over_image": "tank.jpg"
},
{
    "name": "Kazahstan",
    "image": "/Images/kazahstan.gif",
    "roll_over_image": "tank.jpg"
},
{
    "name": "Russia",
    "image": "/Images/russia.gif",
    "roll_over_image": "tank.jpg"
},
{
    "name": "Ukraine",
    "image": "/Images/ukraine.png",
    "roll_over_image": "tank.jpg"
},
{
    "name": "Uzbekistan",
    "image": "/Images/uzbekistan.gif",
    "roll_over_image": "tank.jpg"
}
],
"games": [
{
    "matches": [
    {
        "player1id": 0,
        "player2id": 1,
        "winner": "*"
    },
    {
        "player1id": 2,
        "player2id": 3,
        "winner": "*"
    },
    {
        "player1id": 4,
        "player2id": 5,
        "winner": "*"
    },
    {
        "player1id": 6,
        "player2id": 7,
        "winner": "*"
    },
    {
        "player1id": 0,
        "player2id": 2,
        "winner": "*"
    },
    {
        "player1id": 4,
        "player2id": 6,
        "winner": "*"
    },
    {
        "player1id": 0,
        "player2id": 4,
        "winner": 4
    }
    ]
},
{
    "matches": [
    {
        "player1id": 0,
        "player2id": 1,
        "winner": "*"
    },
    {
        "player1id": 2,
        "player2id": 3,
        "winner": "*"
    },
    {
        "player1id": 4,
        "player2id": 5,
        "winner": "*"
    },
    {
        "player1id": 6,
        "player2id": 7,
        "winner": "*"
    },
    {
        "player1id": 0,
        "player2id": 2,
        "winner": "*"
    },
    {
        "player1id": 4,
        "player2id": 6,
        "winner": "*"
    },
    {
        "player1id": 0,
        "player2id": 4,
        "winner": 0
    }
    ]
}]}';

如果您使用它,它将起作用。

答案 1 :(得分:0)

你搞乱了关键指令,

$arrne['games']['matches'][$matchid]['winner']

应该是

$arrne['games'][$matchid]['matches']['winner']

<击>

你错过了一个数字索引,

$arrne['games']['matches'][$matchid]['winner']

应该是

$arrne['games'][]['matches'][$matchid]['winner']

或者

$arrne['games'][$matchid]['matches'][]['winner']

因为在您的原始JSON中,您有

"games": [
    {
        "matches": [
        /* ... */
        ]
    },
    {
        "matches": [
        /* ... */
        ]
    }

所以结构是games->[index]->matches->[index],而不是games->matches->[index]

此外,简单的array_merge不起作用,您需要array_merge_recursive;

示例代码:

$json=<<<JSON
...
JSON;
$tempArray=json_decode($json,true);
print_r($tempArray);
$matches=array(
    "games"=>array(
        3=>array(
            "matches"=>array(
                array(
                    "winner"=>"winner",
                    "player1id"=>"player1id",
                    "player2id"=>"player2id"
                )
            )
        )
    )
);
print_r(array_merge_recursive($tempArray,$matches));

<击> Live demo Live demo

修改

$tempArray["games"]$tempArray["games"][index]["matches"]都是数字数组,因此array_merge会追加,而不是覆盖。如果您需要修改现有值而不是添加新值,请直接修改

$tempArray["games"][index]["matches"][$matchid]["winner"]="winner";