php - json_encode 在 array_filter 之后有不同的结果

标签 php json array-filter

我希望 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/

相关文章:

java - 更改 Swagger 生成的类名称

ios - Swift - 谓词通过成员数组的属性过滤数组

php - 'function' 和 'use' 以及 'array_filter' 在 PHP 中如何工作?

javascript - JS过滤数组内的数组

PHP 二维数组到 MySQL 数据库

json - Play 2.1特质的Json序列化?

php - 权限被拒绝尝试使用 PHP 打开另一个系统用户的目录

java - 如何将带有GSON的JSON反序列化为对应的泛型Java类型?

php - Laravel Collective HTML5 属性

nginx - 错误 28105#0 : *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream