-1
[
  {
     "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。提前致谢

4

2 回答 2

3

有几件事。

  1. 您不需要$new_val数组,只需在适当的位置编辑这些资源即可。
  2. PHP 是弱类型(string)$value->id == $this->put('id')的,所以没有必要这样做。PHP 引擎将为您执行此转换。
  3. 在等号的左边强制转换什么都不做。(string)$value->description="--";该声明无效。
  4. 这在任何编程语言中都是糟糕的形式......(string)$value->name="--";(string)$value->description="--";执行两个操作的两条语句应该在两条不同的行上。
  5. 一般概念,您的代码应该易于阅读。把它放开一点,让它呼吸。当你多年后回到你的代码时,你会很高兴你这样做了。

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);
    }
}

那里,不是更好吗?

于 2013-01-18T07:32:40.787 回答
1

我认为您必须像这样循环才能存储所有详细信息

foreach ($file as $key => $value) {
    if((string)$value->id == $this->put('id')) {
        $value->name="--";(string)$value->description="--";
    }
        $new_val[$i] =  $value;
    $i++;

}
于 2013-01-18T07:03:14.753 回答