所以我有一个json字符串和一个像这样的数组:
$json_str = '{"key1":["val11", "val12", "val13"], "key2":"val2"}';
$delete_keys = array("val12");
我想从json_str ['key1']中删除delete_keys中的值。所以我做了以下事情:
$json_arr = json_decode($json_str, true);
$key1 = $json_arr['key1'];
foreach ($delete_keys as $key) {
$index = array_search($key, $key1);
if (isset($index))
unset($key1[$index]);
unset($index);
}
$json_arr['key1'] = $key1;
$json_str = json_encode($json_arr);
print $json_str;
现在我期望json_str的结果是这个
{“key1”:[“val11”,“val13”],“key2”:“val2”}
但我得到了这个
{“key1”:{“0”:“val11”,“2”:“val13”},“key2”:“val2”}
如果我删除了最后一个键,它的工作方式正如我预期的那样。有人可以告诉我如何将前者作为json字符串而不是后者。
答案 0 :(得分:1)
您应该使用array_values()重新索引数组。
如果数组中的键不是连续的,则它是一个关联数组。
答案 1 :(得分:0)
在json_encode的PHP文档中有一个这种现象的例子,标有"顺序数组,其中一个键未设置":http://php.net/manual/en/function.json-encode.php
转载于此:
$sequential = array("foo", "bar", "baz", "blong");
// ...
unset($sequential[1]);
var_dump(
$sequential,
json_encode($sequential)
);
// Outputs: string(33) "{"0":"foo","2":"baz","3":"blong"}"
为了使密钥保持顺序,您可以使用array_values
重新编号:
$sequential = array("foo", "bar", "baz", "blong");
// ...
unset($sequential[1]);
$sequential = array_values( $sequential );
var_dump(
$sequential,
json_encode($sequential)
);
// Outputs: string(21) "["foo","baz","blong"]"