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

特定のIDに依存し、他のすべてのIDデータを変更せずにjson値を上書きするにはどうすればよいですか?codeigniterRESTAPIを使用しています。前もって感謝します

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="--";2 つの操作を行う 2 つのステートメントは、2 つの異なる行にある必要があります。
  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 に答える