Php 复制和修改数组
我对PHP没有经验,必须用以下代码修改密码:Php 复制和修改数组,php,Php,我对PHP没有经验,必须用以下代码修改密码: $body=array( 'userInfo' => array( 'userName' => $username, 'password' => $password, 'applicationKey' => $appKey, ), ); 变量$body用于应用程序逻辑和记录阵列: $this->log
$body=array(
'userInfo' => array(
'userName' => $username,
'password' => $password,
'applicationKey' => $appKey,
),
);
变量$body
用于应用程序逻辑和记录阵列:
$this->logger->debug("REQUEST: URL[{$this->config->endpoint}] BODY: " . json_encode($body));
但我不应该记录密码。我想修改一下
我知道我可以将数组复制并粘贴到一个新的变量$body\u,隐藏密码\u
,但我想学习一些PHP习惯用法,更不用说让代码库尽可能紧凑
这样做的优雅方式是什么?在一种我比较舒服的语言中,我会克隆字典,并覆盖敏感值。在PHP中如何实现这一点
更多信息
当前日志语句:
[2018-04-10T18:23:11+00:00] [DEBUG] REQUEST: URL[http://myservice.com/myendpoint/login] BODY: {"userInfo":{"userName":"Administrator","password":"Administrator","applicationKey":"abc123"}} -
[2018-04-10T18:23:11+00:00] [DEBUG] REQUEST: URL[http://myservice.com/myendpoint/login] BODY: {"userInfo":{"userName":"Administrator","password":"********","applicationKey":"abc123"}} -
所需的日志语句:
[2018-04-10T18:23:11+00:00] [DEBUG] REQUEST: URL[http://myservice.com/myendpoint/login] BODY: {"userInfo":{"userName":"Administrator","password":"Administrator","applicationKey":"abc123"}} -
[2018-04-10T18:23:11+00:00] [DEBUG] REQUEST: URL[http://myservice.com/myendpoint/login] BODY: {"userInfo":{"userName":"Administrator","password":"********","applicationKey":"abc123"}} -
您可以根据键的名称将一个值弹出到数组中。所以你有以下几点:
$body=array(
'userInfo' => array(
'userName' => $username,
'password' => $password,
'applicationKey' => $appKey,
),
);
然后你可以做:
$body['userInfo']['password'] = null;
这会将userInfo中的键设置为空值。您可以直接覆盖此值:
$body['userInfo']['password'] = null;
或者只需移除一整把钥匙:
unset($body['userInfo']['password']);
我认为最短的方法是复制数组,并用修改后的
密码值记录它
$body_with_password_hidden = $body;
$body_with_password_hidden['userInfo']['password'] = "********";
然后使用隐藏的密码记录$body\u
您可以创建一个与数据结构匹配的模板,并使用所需的编校符号作为相应密钥的值
$redacted = ['userInfo' => ['password' => '********']];
然后在记录原始数据时,使用array\u replace\u recursive
覆盖原始数据中的值
$this->logger->debug(
"REQUEST: URL[{$this->config->endpoint}] BODY: "
. json_encode(array_replace_recursive($body, $redacted))
);
对于覆盖单个值来说,这可能有点过分,但如果您有一个更复杂的结构,需要替换更多的值,那么这可能是一种更简洁的方法。我构建了一个包来完成这项工作。它很容易使用
您可以通过在第二个构造函数参数中提供任意数组键来编校它。在上面的例子中,我们只是编辑密码
。该包还支持深度嵌套密钥。与您所说的相同-克隆值并删除密钥。$body['userInfo']['password']='';应该做的技巧。可能重复的阅读。您的问题的答案可在上找到。密钥仍将设置为password
,但值将为Null,这很好,根据OP所需的输出语法:)谢谢。这正是我希望学习的技巧。您需要复制阵列,或者只在使用业务逻辑中的密码后进行日志记录,因此我倾向于使用其他解决方案。但还是要谢谢你。