Php 试图通过以键值为目标从数组中删除json对象
免责声明:我对PHP有些陌生。我试图从json数组中删除单个对象,但是当我试图删除DOM对象矩形(每个矩形代表一个数组对象)时,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
process.php
最终会创建数组的副本并将其附加到原始数组中
当我单击删除按钮(classrectangle 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结构定义一个标准,以防止出现类似问题。请看这里: