0

URL投稿データを介してオブジェクトのjsonリストを更新する必要があります。たとえば、次の URL を使用します。

http://myweb.com/index.php?name=Peter&surname=Brown

php で、get メソッドを使用します。

$name = $_GET["name"];
$surname = $_GET["surname"];
$json = array();

        $json["nombre"] = $name;
        $json["lat"] = $lat;
        $data[] = $json;

$json_end= json_encode($data);

そしてjson_endは私が望むように効果的に行われます:

[{"name":"Peter","surname":"Brown"}]

私の質問は、次のような配列を構築するために、json をインクリメントする方法についてです。

[{"name":"Peter","surname":"Brown"}]
[{"name":"newname","surname":"newsurname"}]
// and so on

ユーザーが新しいパラメーターで URL を使用するたびに。

ファイルまたはデータベースに書き込む必要がありますか? どんなヒントも高く評価されます。

アイデアは、すべてのユーザーが URL を使用していくつかのデータを追加できるようにすることです。jsonをフィールドに保存しようとしましたが、保存は現在のセッションに沿ってのみ持続します。

4

3 に答える 3

2
<?
/* This needs to be at the top of your file, without ANYTHING above it */
session_start();

/* ... */

if(!array_key_exists('entries', $_SESSION))
{
    $_SESSION['entries'] = array();
}

$_SESSION['entries'][] = array("name" => $_GET["name"], "surname" => $_GET["surname"]);

$json_string = json_encode($_SESSION['entries']);

これにより、単一の JSON が生成されます。ただし、意図したかどうかはわかりませんが、出力は一連の個別の JSON です。上記の最後の行を次のように置き換えることで、これを行うことができます。

$json_string = '';
foreach($_SESSION['entries'] as $entry){ 
    $json_string.= json_encode($entry) . "\n";
}

また、配列をリセット/空にする方法も必要になるでしょう。その場合、if テストを次のように変更します。

if(!array_key_exists('entries', $_SESSION))

に:

if(!array_key_exists('entries', $_SESSION) || array_key_exists('reset', $_GET))

訪問して使用できるもの

http://myweb.com/index.php?reset

編集:どこかに次のコードを追加する場合:

foreach($_SESSION['entries'] as $id=>$entry){ 
    printf("%2d: %s\n", $id, json_encode($entry));
}

それぞれのキーで列挙された json 要素のリストを取得します。たとえば、次のようになります。

0: "[{\"名前\":\"ピーター\",\"姓\":\"ブラウン\"}]"
 1: "[{\"name\":\"newname\",\"surname\":\"newsurname\"}]"
 2: "[{\"名前\":\"ジョージ\",\"姓\":\"ワシントン\"}]"
 3: "[{\"名前\":\"ジョン\",\"姓\":\"アダムス\"}]"

次に、次のコードを追加すると:

if(array_key_exists('del', $_GET) && is_numeric($_GET['del']))
{
    $key = (int)$_GET['del'];
    if(array_key_exists($key, $_SESSION['entries']))
    {
        unset($_SESSION['entries'][$key]);
    }
    else
    {
        printf('<strong>ERROR: $_GET['del'] = %d but $_SESSION['entries'][%d] doesn't exist.</strong>', $key, $key);
    }
}

delGET パラメータとして id を指定することで、個々の json エントリを削除できます。

例えば、

http://myweb.com/index.php?del=2

に対応するエントリを削除します'[{"name":"George","surname":"Washington"}]';

残りのエントリは次のようになります。

0: "[{\"名前\":\"ピーター\",\"姓\":\"ブラウン\"}]"
 1: "[{\"name\":\"newname\",\"surname\":\"newsurname\"}]"
 3: "[{\"名前\":\"ジョン\",\"姓\":\"アダムス\"}]"
 4: "[{\"名前\":\"トーマス\",\"姓\":\"ジェファーソン\"}]"
于 2012-06-26T15:39:46.877 に答える
2

ネストされたユーザーの配列を作成するだけです:

$data = array (
    0 => array("name"=>"Peter","surname"=>"Brown"),
    1 => array("name"=>"newname","surname"=>"newsurname")
);

echo json_encode($data);

// [{"name":"Peter","surname":"Brown"},{"name":"newname","surname":"newsurname"}]
于 2012-06-26T15:34:22.897 に答える
1

次のようなセッションにデータを保存するのが最も簡単だと思います。

<?php
    session_start();

    if (isset($_GET['name'])) {
        $_SESSION['json'][] = $_GET;
    }

    echo json_encode($_SESSION['json']);
?>

編集:セッションに保存する前に $_GET 配列をフィルタリングして、保存することを意図していない値を保存しないようにすることができます。

編集: もちろん、このデータを複数のセッションで保存する場合は、ファイルまたはデータベース (またはおそらく Cookie) を使用する必要があります。それはすべて、その情報で何をしたいかによって異なります。

于 2012-06-26T15:38:30.233 に答える