使用从前端发送的索引从数组中删除项目

时间:2017-05-20 09:56:28

标签: javascript php json

我正在尝试从php数组中删除一个项目。

我有一个用于存储数据的json文件。 json文件如下所示。

{
    "1.49514754373E+12": {
        "description": "I don't like it",
        "fileNames": [
            "a.jpg",
            "b.jpg",
            "c.jpg"
        ]
    },
    "1.4952754451E+12": {
        "description": "hey there",
        "fileNames": [
            "a.jpg"
        ]
    }
}

我的php代码看起来像这样

if ($_SERVER['REQUEST_METHOD'] === 'POST')  {

  //the id is sent from the front end. In this case it is '0';
  $data =  $_REQUEST['id'];

  $index = json_decode($data);

  // get json from file
  $json = file_get_contents('test.json');

  // turn json into array
  $masterArr = json_decode($json, true);

  unset($masterArr[$index]);

  // turn array back to json
  $json = json_encode($masterArr, JSON_PRETTY_PRINT);

  // save json to file
  file_put_contents('test.json', $json);

  echo $json;

?>

我尝试使用unset - unset($masterArr[$index]);,但这不起作用。谁能看到我做错了什么?

当我echo $index时,我得到0;

var_dump(masterArr)给了我

array(2) {
  ["1.49514754373E+12"]=>
  array(2) {
    ["description"]=>
    string(15) "I don't like it"
    ["fileNames"]=>
    array(3) {
      [0]=>
      string(5) "a.jpg"
      [1]=>
      string(5) "b.jpg"
      [2]=>
      string(5) "c.jpg"
    }
  }
  ["1.4952754451E+12"]=>
  array(2) {
    ["description"]=>
    string(17) "hey there"
    ["fileNames"]=>
    array(1) {
      [0]=>
      string(5) "a.jpg"
    }
  }
}

在上面的示例中,我尝试删除

"1.49514754373E+12": {
    "description": "I don't like it",
    "fileNames": [
        "a.jpg",
        "b.jpg",
        "c.jpg"
    ]
}

3 个答案:

答案 0 :(得分:0)

unset()会破坏指定的变量。如果你想删除文件而不是使用php的unlink功能

答案 1 :(得分:0)

要取消设置任何变量,请使用delete语句:

delete favorites.favorites[1].items[1]

如果你想从数组中实际删除一个项目,以便数组中的所有项目向下移动到较低的索引,你可以使用这样的东西:

favorites.favorites[1].items.splice(1, 1);

对于.splice(),您传递要开始修改数组的索引,然后传递要移除此.splice(1, 1)的项目数,这将删除从索引1开始的1项。

答案 2 :(得分:-1)

根据我的评论,如果$index0,您希望删除所有内容。

所以只需按照以下方式执行

$data =  $_REQUEST['id'];

$index = json_decode($data);
if($index == 0){
  file_put_contents('test.json', "");
  // you can also return your proper response here.
  return;
 }