PHP脚本推数据2d数组



我几乎可以将数据添加到我的文件中。但我正试图找出确切的语法..任何帮助非常感谢..

我的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);

my valid json file

{
"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"
                    }
                }
            ]
        }
    }
}

请帮助,似乎很简单,但找不到确切的代码来做…请帮助…

问题是你的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
    }
    ]
}]}';

你把键顺序弄乱了,

$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));
>

<罢工现场演示>p> 编辑

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

一样修改
$tempArray["games"][index]["matches"][$matchid]["winner"]="winner";

最新更新