Joh*_*nes 3 php json array-filter
我希望json_encode返回这样的东西
[{key: "value"},{key:"value"},...]
Run Code Online (Sandbox Code Playgroud)
相反,我得到这样的东西:
{"1": {key: "value"}, "2": {key: "value"}, ...}
Run Code Online (Sandbox Code Playgroud)
结果很好,直到我做了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;
}
Run Code Online (Sandbox Code Playgroud)
所以,再次,如果我注释掉,array_filter我得到了我想要的json_encode任何somefunction回报,如果不是,我得到一个JSON-Object.
如果我var_dump $result之前和之后array_filter它是相同类型的PHP数组,键中没有字符串等等.
你想要一个,array但是你得到了json对象,因为你的数组并不是从0尝试array_values重置数组开始的
例
$arr = array(1=>"a",2=>"Fish");
print(json_encode($arr));
print(json_encode(array_values($arr)));
Run Code Online (Sandbox Code Playgroud)
产量
{"1":"a","2":"Fish"}
["a","Fish"]
Run Code Online (Sandbox Code Playgroud)
更换
$result = array_filter($result, $ignorefunc);
Run Code Online (Sandbox Code Playgroud)
同
$result = array_filter($result, $ignorefunc);
$result = array_values($result);
Run Code Online (Sandbox Code Playgroud)