[
{
"id" : 1,
"name" : "levin",
"description" : "some desc",
"size" : "100KG",
"actions" : {
"walking" : true,
"eating" : true
}
},
{
"id" : 2,
"name" : "clara",
"description" : "some desc",
"size" : "2000KG",
"actions" : {
"walking" : false,
"eating" : true
}
}
]
这是我的person.json文件。我想更新(覆盖)现有值。我没有找到任何有用的问题。
我有一个名字“levin”我想覆盖它为空或“---”。但它应该只通过“id”。以下是我的PHP代码,但它无法正常工作:(
public function api_put()
{
//print($this->put('id')); am getting here 2 value from other page
//print($this->put('action'));.
if($this->put('action') == "remove"){
$file = json_decode(file_get_contents("assets/json/person.json"));
$new_val = array();
$i = 0 ;
foreach ($file as $key => $value) {
if((string)$value->id == $this->put('id')) {
$data[] = (string)$value->name="--";(string)$value->description="--";
$new_val[$i] = $data;
$i++;
}
}
file_put_contents('assets/json/person.json', json_encode($new_val));
$message = array('id' => $this->put('id'), 'message' => 'Successfully updated!!');
$this->response($message, 200);
}
}
如何覆盖json值取决于特定的id并且不更改所有其他id数据。我正在使用codeigniter REST api。提前谢谢
答案 0 :(得分:3)
有几件事。
$new_val
数组,只需编辑这些资源即可。(string)$value->id == $this->put('id')
。 PHP引擎将为您执行此转换。(string)$value->description="--";
该陈述无效。(string)$value->name="--";(string)$value->description="--";
两个操作的两个语句应该在两个不同的行上。public function api_put()
{
if ($this->put('action') == 'remove')
{
$file = json_decode(file_get_contents('assets/json/person.json'));
foreach ($file as $key => $value)
{
if ($value->id == $this->put('id'))
{
$value->name = '--';
$value->description = '--';
}
}
file_put_contents('assets/json/person.json', json_encode($file));
$message = array('id' => $this->put('id'), 'message' => 'Successfully updated!!');
$this->response($message, 200);
}
}
那里,还不是那么好吗?
答案 1 :(得分:1)
我认为您必须像这样循环才能存储所有细节
foreach ($file as $key => $value) {
if((string)$value->id == $this->put('id')) {
$value->name="--";(string)$value->description="--";
}
$new_val[$i] = $value;
$i++;
}