我正在尝试从JSON数组中删除一个对象但是有一些问题。这就是我现在所拥有的。
{
"value":"In-plop",
"no_delete":true,
"disabled":null,
"resource":"e48f8f",
"email":"1"
}
]';
foreach ($status as $key => $value) {
if (in_array('Dispatched', $value)) {
unset($status[$key]);
}
}
$status = json_encode($status);
echo $status;
我正在尝试删除整个对象。我知道我当前的代码只会删除单个对象的值,但这就是我被困住的地方。问题是对象位置不是静态的,它可以在数组中的任何位置。唯一静态的是value:Dispatched
。有什么建议吗?
{
"value":"opuy",
"no_delete":true,
"disabled":null,
"resource":"a382d1",
"email":"1"
},
答案 0 :(得分:3)
您应首先转换它,删除元素然后重新编码。
$json = json_decode($status, true); //return an array
foreach($json as $key => $value) {
if($value['value'] == 'Dispatched') {
unset($json[$key]);
}
}
$status = json_encode($json);
答案 1 :(得分:2)
首先你必须使用json_decode解析你的json,之后删除未使用的元素,最后使用json_encode将数组转换为字符串。
此代码有效:
$status='[
{
"value":"New",
"no_delete":true,
"disabled":null,
"resource":"4eb2df",
"email":null
},
{
"value":"Assigned",
"no_delete":true,
"disabled":null,
"resource":"4c85b6",
"email":1
},
{
"value":"Dispatched",
"no_delete":true,
"disabled":null,
"resource":"a382d1",
"email":"1"
},
{
"value":"Scheduled",
"no_delete":true,
"disabled":null,
"resource":"75b4eb",
"email":"1"
},
{
"value":"In-Progress",
"no_delete":true,
"disabled":null,
"resource":"e48f8f",
"email":"1"
}
]';
$json = json_decode($status);
$result = [];
foreach($json as $key => $value) {
if($value->value != "Dispatched") {
$result[] = $value;
}
}
print_r(json_encode($result));
答案 2 :(得分:2)
由于数组中有布尔值true
(将匹配类型变换的true值,例如string" Dispatched"),您需要传递true
作为第三个值参数in_array()
进行严格比较。
假设您已为某个数组运行json_decode()
并传递true
,请在in_array()
中使用严格比较:
if (in_array('Dispatched', $value, true)) {
unset($status[$key]);
}
在这种情况下,知道我个人会使用的密钥:
if ($value['value'] === 'Dispatched') {
unset($status[$key]);
}