我需要通过url post data更新对象的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添加一些数据。我试图将json存储到fiel,但存储仅在当前会话中持久。
答案 0 :(得分: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"}]
答案 1 :(得分: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: "[{\"name\":\"Peter\",\"surname\":\"Brown\"}]" 1: "[{\"name\":\"newname\",\"surname\":\"newsurname\"}]" 2: "[{\"name\":\"George\",\"surname\":\"Washington\"}]" 3: "[{\"name\":\"John\",\"surname\":\"Adams\"}]"
如果您随后添加以下代码:
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: "[{\"name\":\"Peter\",\"surname\":\"Brown\"}]" 1: "[{\"name\":\"newname\",\"surname\":\"newsurname\"}]" 3: "[{\"name\":\"John\",\"surname\":\"Adams\"}]" 4: "[{\"name\":\"Thomas\",\"surname\":\"Jefferson\"}]"
答案 2 :(得分:1)
我认为将数据存储在会话中是最容易的,例如:
<?php
session_start();
if (isset($_GET['name'])) {
$_SESSION['json'][] = $_GET;
}
echo json_encode($_SESSION['json']);
?>
编辑:您可能希望在将$ _GET数组存储在会话中之前对其进行过滤,这样就不会存储不应存储的值。
编辑:当然,如果要将此数据保存到多个会话中,则需要使用文件或数据库(或者可能是cookie)。这一切都取决于你想对信息做些什么。