我希望 json_encode 返回这样的内容
[{key: "value"},{key:"value"},...]
相反,我得到的是这样的:
{"1": {key: "value"}, "2": {key: "value"}, ...}
结果很好,直到我做了一个array_filter
...奇怪...
function somefunction($id, $ignore = array()) {
$ignorefunc = function($obj) use ($ignore) {
return !in_array($obj['key'], $ignore);
};
global $db;
$q = "Some query";
$rows = $db->giveMeSomeRows();
$result = array();
if ($rows) {
// this mapping I've always done
$result = array_map(array('SomeClass', 'SomeMappingFunction'), $rows);
if (is_array($ignore) && count($ignore) > 0) {
/////// PROBLEM AFTER THIS LINE ////////
$result = array_filter($result, $ignorefunc);
}
}
return $result;
}
再说一遍,如果我注释掉 array_filter
我会从 json_encode
得到我想要的东西,不管 somefunction
返回什么,如果不是我得到一个JSON 对象。
如果我在 array_filter
之前和之后 var_dump
$result
它是相同类型的 PHP 数组,键中没有字符串等等.
最佳答案
你想要一个 array
但你得到的是 json
对象,因为你的数组不是从 0
开始尝试使用 array_values
重置数组
例子
$arr = array(1=>"a",2=>"Fish");
print(json_encode($arr));
print(json_encode(array_values($arr)));
输出
{"1":"a","2":"Fish"}
["a","Fish"]
替换
$result = array_filter($result, $ignorefunc);
与
$result = array_filter($result, $ignorefunc);
$result = array_values($result);
关于php - json_encode 在 array_filter 之后有不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15833720/