2017-10-18 51 views
0

我有以下数组,我希望能够从JSON对象中删除所有“phonenumber”键以及它的值。只有钥匙“phonenumber”一个不是整个对象。我怎样才能做到这一点?如何使用PHP从数组中删除JSON密钥?

[ 
    { 
     "role": "admin", 
     "id": "59df4ef2d8d39", 
     "email": "[email protected]", 
     "name": "A", 
     "lastname": "A", 
     "password": "1", 
     "image": "img_webshop\/userimage-59dfb91515810.png" 
    }, 
    { 
     "role": "user", 
     "id": "59df4f1b070e6", 
     "phonenumber": "12345678", 
     "name": "B", 
     "lastname": "B", 
     "password": "2", 
     "image": "img_webshop\/userimage-59e37de69475b.png" 
    }, 
    { 
     "role": "user", 
     "id": "59dfc0cb07985", 
     "email": "[email protected]", 
     "name": "C", 
     "lastname": "C", 
     "password": "3", 
     "image": "img_webshop\/userimage-59dfc0cb06c5f.png" 
    }, 
    { 
     "role": "user", 
     "id": "59dfc22f26f78", 
     "phonenumber": "87654321", 
     "name": "D", 
     "lastname": "D", 
     "password": "4", 
     "image": "img_webshop\/userimage-59dfc22f2638d.png" 
    }, 
    { 
     "role": "user", 
     "id": "59dfc460b261e", 
     "email": "[email protected]", 
     "name": "E", 
     "lastname": "E", 
     "password": "5", 
     "image": "img_webshop\/userimage-59dfc460af866.png" 
    } 
] 

回答

4
// make array 
$array = json_decode($your_json_string, true); 

// loop through array 
foreach($array as $key => $item){ 
     // unset them 
     unset($array[$key]["phonenumber"]); 
} 

// make json again 
$json_string_modified = json_encode($array); 

或使用参考

// make array 
$array = json_decode($your_json_string, true); 

// loop through array using reference 
foreach($array as &$item){ 

     // unset specific key 
     unset($item["phonenumber"]); 

} 

// unset reference 
unset($item); 

// make json again 
// you may remove JSON_PRETTY_PRINT flag, I kept it just to see o/p 
$json_string_modified = json_encode($array,JSON_PRETTY_PRINT); 
+2

我不认为你需要的isset测试。如果它不在那里,则不会出错。 –

+0

@Matt_S感谢修改 –

1
$jsonArray=json_decode($data); 
//Remove unvanted props 
foreach ($jsonArray as $key=>$row) { 

    foreach ($row as $prop=>$field) { 
     if ($prop != 'phonenumber') 
      $newArray[$key][$prop] = $field; 
     } 

} 

$jsonArray=json_encode($newArray); 
+1

这使用潜在的大量内存来创建一个克隆阵列,并且比@ 3161993 –

+0

是啊,你是对的,但一些PHP版本不能删除对象属性。如果这个属性受保护,那么你不能做任何改变 –

+0

你'重新处理*数组*,而不是对象。 – deceze