0

次のような.htmlにあるユーザーへの郵便番号の1対1のキー構造があります...

...
'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 オブジェクトのサブセットであると仮定します。また、別の方法で明示的に述べておらず、既存のオブジェクト構造では 1 対 1 の関係が許可されていないことを考えると、オブジェクト内のユーザーに対する郵便番号の関係は1対 1のみであると仮定します。多くの関係。これらすべての仮定を考えると、差し迫った問題の解決策は、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": ""
}

PHP が正しく解析できるようにするには、有効な JSON オブジェクト表記でなければならないことに注意してください。list.htmlJSON仕様の要件である二重引用符の代わりに単一引用符を使用しているため、既存の例はPHPでは機能しません。そのため、その部分が list.html ファイルで有効であることを確認する必要があります。

それを超えて、このアプローチは簡単に解決できない多くの深刻な問題を引き起こすため、このアプローチを採用することは強くお勧めしません。たとえば、2 つの PHP スクリプトが同時にファイルを上書きしようとする可能性があるため (データの整合性がない)、このアプローチを使用してデータが破損しないことを保証することはできません。また、リストが十分に大きくなると、多くの不必要な CPU とメモリの問題を犠牲にせずに、このスケールを簡単に作成することはできません。さらに、誰がファイルを直接編集できるかを制御する方法がないため、そのデータを使用しようとする基礎となるアプリケーション コードへのデータ フローを制御する方法がありません。

より良い解決策は、データベースを使用することです。そうすれば、データとそのユーザー権限の両方を制御できます。さらに、非プログラマーがフロントエンドを介して PHP を介してデータを編集/変更/読み取るためのフロントエンドを提供できます。 .

于 2012-12-21T20:28:01.117 に答える