我需要通过 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 添加一些 dat。我试图将 json 存储到一个 fiel,但存储仅在当前会话中持久。
<?
/* 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: "[{''"姓名''":''"新名",''"姓氏":''"新姓氏''"}]" 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);
}
}
通过将 id 指定为 del
GET 参数,可以删除单个 JSON 条目。
例如
http://myweb.com/index.php?del=2
将删除与'[{"name":"George","surname":"Washington"}]';
对应的条目
其余条目将是:
0: "[{''"姓名''":''"彼得",''"姓氏":''"布朗''"}]" 1: "[{''"姓名''":''"新名",''"姓氏":''"新姓氏''"}]" 3: "[{''"名字''":''"约翰",''"姓氏":''"亚当斯''"}]" 4: "[{''"姓名''":托马斯''",''"姓氏":''"杰斐逊''"}]"
只需创建一个嵌套的用户数组:
$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"}]
我认为将数据
存储在会话中是最容易的,如下所示:
<?php
session_start();
if (isset($_GET['name'])) {
$_SESSION['json'][] = $_GET;
}
echo json_encode($_SESSION['json']);
?>
编辑:您可能希望在将 $_GET 数组存储在会话中之前对其进行筛选,以便不会存储不打算存储的值。
编辑:当然,如果您想为多个会话保存此数据,则需要使用文件或数据库(或者可能是cookie)。这完全取决于您要如何处理这些信息。