从PHP Array

时间:2015-08-06 02:57:38

标签: php json

我有一个 PHP 函数$users->getFullUserList('json'),它返回一个 JSON 字符串,其中包含用户数据的用户列表,该用户列表是使用PHP {{1}从PHP数组构建的}}

PHP数组json_encode($this->userListArray)在转换为$this->userListArray字符串之前看起来如下所示......

JSON

我需要帮助的是让我的函数Array ( [user1] => Array ( [id] => 1 [user_name] => jasondavis [first_name] => Jason [last_name] => Davis [is_admin] => 1 [email_address] => jasonyrty@tyrtl.com [gravatar_id] => 31b64e4876d603ce78e04102c67d6144 ) [1702c3d0-df12-2d1b-d964-521becb5e3ad] => Array ( [id] => 1702c3d0-df12-2d1b-d964-521becb5e3ad [user_name] => Jeff [first_name] => Jeff [last_name] => Mosley [is_admin] => 1 [email_address] => fgfgh@rtyrtyre.com [gravatar_id] => 5359bf585d11c5c35602f9bf5e66fa5e ) ) 允许注入另一个参数,该参数将是$users->getFullUserList('json')的数组, NOT 应该是最终的一部分 JSON字符串

例如,如果我想从PHP数组生成我的JSON字符串,并让它从JSON字符串中排除用户keysemail_address个键。

我不想简单地从PHP数组中删除它们,因为我稍后需要在PHP中访问它们。我只是希望新传入的数组中的first_name从生成的JSON中排除,并仍保留在PHP数组中。

keys

我意识到简单的解决方案是克隆我的$excludeKeysFromJson = array( 'first_name', 'email_address' ); $users->getFullUserList('json', $excludeKeysFromJson) 数组,然后从$this->userListArray数组中删除匹配的键,并从新的克隆数组中生成JSON字符串。

我希望找到一个更好的性能方法,不需要克隆我庞大的用户列表数组,并保留2个用户列表数组副本,其中1个缺少几个键。

有更好的方法吗?

1 个答案:

答案 0 :(得分:4)

您可以使用array_diff_keyarray_flip创建一个过滤掉密钥的数组(将排除数组值转换为密钥)

像这样......

public function getFullUserList($format, array $exclude = []) {
    $filtered = array_map(function($user) use ($exclude) {
        return array_diff_key($user, array_flip($exclude));
    }, $this->userListArray);

    switch($format) {
        case 'json' :
            return json_encode($filtered);
        default :
            return $filtered;
    }
}

Demo