如何从JSON数组中删除对象

时间:2015-07-21 17:34:16

标签: php json

我正在尝试从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"
},

3 个答案:

答案 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]);
   }