我有一个 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字符串中排除用户keys
和email_address
个键。
我不想简单地从PHP数组中删除它们,因为我稍后需要在PHP中访问它们。我只是希望新传入的数组中的first_name
从生成的JSON中排除,并仍保留在PHP数组中。
keys
我意识到简单的解决方案是克隆我的$excludeKeysFromJson = array(
'first_name',
'email_address'
);
$users->getFullUserList('json', $excludeKeysFromJson)
数组,然后从$this->userListArray
数组中删除匹配的键,并从新的克隆数组中生成JSON字符串。
我希望找到一个更好的性能方法,不需要克隆我庞大的用户列表数组,并保留2个用户列表数组副本,其中1个缺少几个键。
有更好的方法吗?
答案 0 :(得分:4)
您可以使用array_diff_key
和array_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;
}
}