0

我对位于 .html 中的用户有一个一对一的邮政编码结构,看起来像......

...
'80135': 'user1',
'80136': 'user1',
'80137': '',
'80138': '',
'80202': 'user2',
'80203': 'user2',
'80204': '',
'80205': '',
'80206': '',
'80207': '',
...

我想为 user3 获取一个批量列表邮政编码并填写或覆盖旧用户。因此,例如,如果我有 user3 的邮政编码 (80202,80203,80204),那么我之前的代码块将更改为...

...
'80135': 'user1',
'80136': 'user1',
'80137': '',
'80138': '',
'80202': 'user3',
'80203': 'user3',
'80204': 'user3',
'80205': '',
'80206': '',
'80207': '',
...

使用文本编辑器的原因是现在完成我的设置,但理想情况下,最好有一个客户端应用程序,我们的非程序员团队可以根据需要更新和进行更改,因此为此编写一个脚本对于未来的计划会很好。我通过...将内容传递到我的网站

var list_load = {<?php include_once('list.html'); ?>};

因为我相信有些人可能对这些信息的存储有不同的想法,这个列表很长,有 35,000 行代码,所以任何关于完全改变我的代码的想法都考虑一个迁移数据的过程。

4

1 回答 1

2

根据您提供的信息,我将假设您的示例代码是 JSON 对象的子集。我还将假设您的对象中的邮政编码与用户只有一对一的关系,因为您没有明确说明其他情况,并且现有的对象结构不允许一对一-很多关系。鉴于所有这些假设,您当前问题的解决方案是将 JSON 加载到 PHP 中,在那里进行更改,然后用更新的 JSON 对象覆盖整个文件。

$json = file_get_contents('list.html');
$array = json_decode($json, true);

$oldUser = 'user2';
$newUser = 'user3';
$listZipCodes = array("80204"); // list of zip codes to update

// Update the JSON based on user ...
foreach ($array as $zipCode => $user) {
    if ($user === $oldUser) {
        $array[$zipCode] = $newUser;
    }
}

// Update the JSON based on zip code ...
foreach (array_keys($array) as $zipCode) {
    if (in_array($zipCode, $listZipCodes)) {
        $array[$zipCode] = $newUser;
    }
}

$json = json_encode($array);

file_put_contents('list.html', $json);

同样,这一切都假设list.html看起来像这样......

{
    "80135": "user1",
    "80136": "user1",
    "80137": "",
    "80138": "",
    "80202": "user2",
    "80203": "user2",
    "80204": "",
    "80205": "",
    "80206": "",
    "80207": ""
}

请记住,它必须是有效的 JSON 对象表示法list.html以便 PHP 能够正确解析它。您现有的示例不适用于 PHP,因为您使用的是单引号而不是双引号,这是 JSON 规范的要求。因此,您必须确保该部分在您的 list.html 文件中有效。

除此之外,我非常不鼓励您采用这种方法,因为它会导致许多不容易解决的严重问题。例如,您无法确保使用此方法不会损坏您的数据,因为任何两个 PHP 脚本都可能尝试同时覆盖文件(没有数据完整性)。此外,如果列表足够大,如果不花费大量不必要的 CPU 和内存问题,您将无法轻松实现此规模。此外,您无法控制谁可以直接编辑文件,因此无法控制流向尝试使用该数据的底层应用程序代码的数据流。

更好的解决方案是使用数据库,这样您就可以控制数据及其用户权限,此外,您还可以为非程序员提供一个前端,通过 PHP 通过您的前端编辑/修改/读取数据.

于 2012-12-21T20:28:01.117 回答