Php 试图通过以键值为目标从数组中删除json对象

Php 试图通过以键值为目标从数组中删除json对象,php,json,Php,Json,免责声明:我对PHP有些陌生。我试图从json数组中删除单个对象,但是当我试图删除DOM对象矩形(每个矩形代表一个数组对象)时,process.php最终会创建数组的副本并将其附加到原始数组中 当我单击删除按钮(classrectangle delete)时,我将deleteStatus隐藏输入值更改为delete,我正试图在process.php中提取该值。这是process.php中的一个特殊位,我认为它会起作用: foreach($arr_data as $key => $valu

免责声明:我对PHP有些陌生。我试图从json数组中删除单个对象,但是当我试图删除DOM对象矩形(每个矩形代表一个数组对象)时,
process.php
最终会创建数组的副本并将其附加到原始数组中

当我单击删除按钮(class
rectangle delete
)时,我将
deleteStatus
隐藏输入值更改为
delete
,我正试图在
process.php
中提取该值。这是
process.php
中的一个特殊位,我认为它会起作用:

 foreach($arr_data as $key => $value) {
        if($value->value != "delete") {
            $arr_data[] = $value;
        }
     }
下面是整个
过程。php

<?php

   //$myFile = "data/data.json";
   $filename = $_POST['store-template-name'];
   $myFile = "data/" . $filename;
   $arr_data = array(); // create empty array

  try
  {
       //Get form data
       $formdata = array(
          'ID'=> $_POST['ID'],
          'attributeName'=> $_POST['attributeName'],
          'deleteStatus'=> $_POST['deleteStatus'],
          'attributeType'=> $_POST['attributeType']
       );
       //Get data from existing json file
       $jsondata = file_get_contents($myFile);
       // converts json data into array
       $arr_data = json_decode($jsondata, true);
       $updateKey = null;
       foreach ($arr_data as $k => $v) {
            if ($v['ID'] == $formdata['ID']) {
                $updateKey = $k;
            }
        }
       //  delete object in json
       foreach($arr_data as $key => $value) {
          if($value->value != "delete") {
              $arr_data[] = $value;
          }
       }
        if ($updateKey === null) {
            array_push($arr_data,$formdata);
        } else {
            $arr_data[$updateKey] = $formdata;
        }

       $jsondata = json_encode($arr_data);

       //write json data into data.json file
       if(file_put_contents($myFile, $jsondata)) {
            echo 'Data successfully saved';
        }
       else
            echo "error";
   }
   catch (Exception $e) {
            echo 'Caught exception: ',  $e->getMessage(), "\n";
   }
?>

当值为“delete”时,可能您正在尝试过滤
$arr\u数据
数组以删除实体,对吗?如果是,你可以试试这个

foreach($arr_data as $key => $value) {
   if($value->value != "delete") {
     $arr_data[] = $value;
   }else{
      unset($arr_data[$key]);
   }
}
还是这个

$arr_data = array_filter($arr_data, function($value){
     return $value->value != "delete";
});

您能否打印一个
$arr\u data
的示例(使用
var\u dump()
print\r
)之类的工具)?此外,您应该只发布对我们了解您的问题非常必要的代码,也许可以考虑删除您问题中的一些漏洞。^最好使用
var_export():)你真的得到了
删除Id
更新Id
?或者两者同时可用?@WilliamPerron Sure,$arr_数据看起来像
[{“ID”:“12”,“attributeName”:“PatientName”,“valueX”:“413”,“valueY”:“175.71875”,“valueHeight”:“28”,“valueWidth”:“207”,“valueURL”:“www.test.com”,“attributeType”:“missing element”,{“deletstatus”:“no(delete”},{“ID”:“13”,“attributeName”:“PatientName”,“valueX”:“433”,valueY:“155.71243”,“valueHeight:“44”,“valueWidth:“254”,“valueURL:“www.test.com”,“attributeType:“missing element”},{“deleteStatus:“delete”}]
Anderson,当我尝试您建议的第一段代码时(在同一位置代替我自己的代码),它通过创建每个ID的副本将数组的大小增加一倍。您知道为什么吗?是的,您是正确的,我正在尝试删除键
deleteStatus
的值为
delete
的对象。在您的示例中,您正在查找错误的键
$value->value==“delete”
,您应该查找
$value->deleteStatus==“delete”
我正在查找您的json,我认为它的结构是错误的。因为您要查找的键“deleteStatus”不存在于所有对象中,并且在某些对象中该键存在,但存在于另一个对象中,因此,您可以在调用时
t找到该值
$value->deleteStatus==“delete”`。您必须为json结构定义一个标准,以防止出现类似问题。请看这里: