如何用PHP自动提取数组/对象中的email与username字段
如何自动过滤数组/对象,仅提取指定字段?
刚好遇到过类似的场景,不用一个个unset那么麻烦,我们可以写一个通用的处理函数,只指定要保留的字段,自动过滤掉其他内容,还能兼容数组和对象两种数据类型,完美匹配你的需求。
实现思路:
- 先明确要保留的字段列表(比如这里的
email和username) - 遍历原始数据的每一项,对数组和对象类型做兼容处理
- 只提取目标字段,构建新的结果数组
完整代码示例:
// 定义需要保留的字段 $requiredFields = ['email', 'username']; // 你的原始数据(假设已解析为PHP变量) $sourceData = [ [ 'user_id' => 65751, 'social_id' => '', 'parent_id' => '', 'org_id' => 1, 'type' => 3, 's_id' => 1, 'role_id' => 0, 'active' => 1, 'name' => 'RX', 'first_name' => 'JJ', 'last_name' => 'DKL', 'email' => 'first@testmail.com', 'secondary_email' => '', 'username' => 'cLvcyUr2' ], (object) [ 'user_id' => 82197, 'social_id' => '', 'parent_id' => '', 'org_id' => 1, 'type' => 2, 's_id' => 1, 'role_id' => 0, 'active' => 1, 'name' => 'sec', 'first_name' => 'XX', 'last_name' => 'J3', 'email' => 'first@testmail.com', 'secondary_email' => '', 'username' => 'VfTqXyvJ' ] ]; // 通用提取函数 function extractTargetFields($data, $targetFields) { return array_map(function($item) use ($targetFields) { $filteredItem = []; foreach ($targetFields as $field) { // 兼容数组和对象,同时处理字段不存在的情况避免报错 if (is_array($item) && isset($item[$field])) { $filteredItem[$field] = $item[$field]; } elseif (is_object($item) && property_exists($item, $field)) { $filteredItem[$field] = $item->$field; } } return $filteredItem; }, $data); } // 执行过滤 $finalResult = extractTargetFields($sourceData, $requiredFields); // 输出结果 print_r($finalResult);
输出结果:
Array ( [0] => Array ( [email] => first@testmail.com [username] => cLvcyUr2 ) [1] => Array ( [email] => first@testmail.com [username] => VfTqXyvJ ) )
这个方法的优势很明显:扩展性极强,以后要提取其他字段,只需要修改$requiredFields数组就行;同时加了字段存在性判断,避免因字段缺失导致的报错,逻辑更健壮。
内容的提问来源于stack exchange,提问作者Raku
相关产品推荐
相关产品推荐

