2015-07-21 51 views
0

我想从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" 
}, 

回答

2

既然你在阵列中有布尔true值(将匹配类型篡改的真正价值,如字符串“调度”),你需要通过true的第三个参数至in_array()进行严格比较。

假设你已经运行json_decode()和一个数组传递true,只是用在in_array()严格的比较:

if (in_array('Dispatched', $value, true)) { 
    unset($status[$key]); 
    } 

在这种情况下,知道密钥我个人会用:

if ($value['value'] === 'Dispatched') { 
    unset($status[$key]); 
    } 
+0

真棒的人,我实际上有我的实际代码json解码,但我想我什么时候更短在这里,我忘了把它放在。谢谢你的帮助。 ,非常感激 – samjones39

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); 
+0

真棒人,我实际上在我的实际代码中有json解码,但是我想我做的时间越短,在这里我就忘记了。谢谢你的帮助。 ,非常感激。 – samjones39

+0

@ samjones39:这是一个很好的答案,但它能告诉你为什么你的代码不起作用吗? – AbraCadaver

+0

@abraCadaver,嘿感谢您抽出时间,并在您的评论中解释。我意识到为什么我的原始编码不起作用。你的回答也很好。既然我不能接受,我决定接受第一个回应。 – samjones39

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)); 
+0

真棒的人,我实际上有我的实际代码中的json解码,但我想我什么时候更短在这里,我忘了把它放在。谢谢你的帮助。 ,非常感谢 – samjones39