如何在 foreach 循环中排除不需要的数组字段以精简邮件内容
发布时间 - 2026-01-13 00:00:00 点击率:次本文介绍如何通过条件过滤,在 php 的 foreach 循环中仅保留指定键名的数据,从而避免向通知邮件中输出冗余字段(如 datavalue、transid 等),提升可读性与安全性。
在处理第三方支付 API(如 Authorize.Net)返回的原始响应数据时,常会遇到字段繁多、结构嵌套的问题。默认全量输出不仅增加邮件体积,还可能暴露敏感或无关信息(如 DataDescriptor、Terms、Card_Holder)。为精准控制邮件内容,应在遍历 $data 时主动过滤——只保留业务必需字段。
推荐做法是在主 foreach 循环中加入白名单校验,并使用 continue 跳过非目标键:
function sent_mail($data = array()) {
$whitelist = ['InvoiceID', 'Amount', 'Item_name', 'FirstName', 'LastName', 'Email', 'Website'];
$out = "";
foreach ($data as $k => $value) {
// 跳过不在白名单中的顶层键
if (!in_array($k, $whitelist)) {
continue;
}
if (is_array($value)) {
// 若值为数组(如多商品项),仍需进一步处理(可选:仅取首项或展开)
foreach ($value as $key => $v) {
// 注意:此处 $key 是子键,若需过滤子键也应加白名单逻辑
$out .= ucwords($key) . ' Name : ' . htmlspecialchars($v) . "
";
}
} else {
$out .= ucwords($k) . ' : ' . htmlspecialchars($value) . "
";
}
}
$msg = "Receipt Of Payment
" . $out;
$to = 'admin@example.com'; // 替换为真实邮箱,避免使用含 cf_email 的混淆写法
$subject = 'New Payment';
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=utf-8\r\n"; // 建议升级为 UTF-8
// 生产环境请改用更可靠的邮件库(如 PHPMailer 或 SMTP)
@mail($to, $subject, $msg, $headers);
}✅ 关键优化点说明:
- 使用 in_array() + 静态白名单实现轻量级字段过滤,逻辑清晰、性能高效;
- 对输出内容添加 htmlspecialchars(),防止 XSS 风险(尤其当字段含用户输入时);
- 将邮件编码升级为 utf-8,兼容中文、特殊符号等;
- 注意:若 $data 中存在嵌套数组(如 'Items' => [['Item_name'=>'...', 'Item_Desc'=>...]]),当前逻辑会原样展开所有子键。如需进一步精简,可在内层循环也加入子键白名单(例如只保留 'Item_name');
- ⚠️ @mail() 已被广泛认为不够健壮,建议后续迁移到 PHPMailer 或 Symfony Mailer 等专业方案,以支持错误处理、附件、SMTP 认证等功能。
通过这一改造,邮件将严格只呈现 InvoiceID、Amount、Item_name、FirstName、LastName、Email 和 Website 这 7 个核心字段,既满足财务核对需求,又降低信息泄露风险。
# php
# word
# html
# 编码
# ai
# 邮箱
# .net
# lsp
# symfony
# xss
# foreach
# mail
# continue
# 循环
# 升级为
# 跳过
# 这一
# 是在
# 已被
# 遍历
# 可在
# 可选
# 应在
# 等专业
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
香港服务器如何优化才能显著提升网站加载速度?
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
如何在Windows环境下新建FTP站点并设置权限?
利用 Google AI 进行 YouTube 视频 SEO 描述优化
详解jQuery停止动画——stop()方法的使用
如何在 React 中条件性地遍历数组并渲染元素
Laravel用户密码怎么加密_Laravel Hash门面使用教程
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
详解jQuery中基本的动画方法
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
佛山网站制作系统,佛山企业变更地址网上办理步骤?
清除minerd进程的简单方法
bing浏览器学术搜索入口_bing学术文献检索地址
网站优化排名时,需要考虑哪些问题呢?
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
如何在万网主机上快速搭建网站?
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
浅述节点的创建及常见功能的实现
JavaScript如何实现继承_有哪些常用方法
如何续费美橙建站之星域名及服务?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
Laravel如何使用Collections进行数据处理?(实用方法示例)
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
Laravel如何处理CORS跨域请求?(配置示例)
b2c电商网站制作流程,b2c水平综合的电商平台?
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
如何在阿里云域名上完成建站全流程?
个人网站制作流程图片大全,个人网站如何注销?
简历没回改:利用AI润色让你的文字更专业
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
如何在IIS中新建站点并配置端口与IP地址?
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
JS实现鼠标移上去显示图片或微信二维码
原生JS实现图片轮播切换效果
制作旅游网站html,怎样注册旅游网站?
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
Python并发异常传播_错误处理解析【教程】
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
如何撰写建站申请书?关键要点有哪些?
重庆市网站制作公司,重庆招聘网站哪个好?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
高防服务器租用首荐平台,企业级优惠套餐快速部署
Laravel如何处理异常和错误?(Handler示例)
Laravel如何使用Eloquent进行子查询
香港服务器部署网站为何提示未备案?
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】


}
$msg = "