PHP如何实现数组元素分组匹配并替换为唯一匿名标识
PHP数组元素按首次出现顺序映射匿名标识实现方案
核心逻辑不需要拆分「生成映射表」「重组数组」两次遍历,借助array_map配合引用传值的映射数组,一次遍历即可完成全部处理,代码简洁无冗余。
实现代码
// 原始输入数组 $rawList = ['bobby', 'kevin', 'bill', 'kevin', 'brian', 'bobby', 'bobby']; $nameMap = []; $anonList = array_map(function($name) use (&$nameMap) { // 首次出现的元素,按当前映射计数生成新编号 if (!isset($nameMap[$name])) { $nameMap[$name] = 'bidder' . (count($nameMap) + 1); } return $nameMap[$name]; }, $rawList);
运行结果
执行后$anonList的输出和预期完全匹配:
Array ( [0] => bidder1 [1] => bidder2 [2] => bidder3 [3] => bidder2 [4] => bidder4 [5] => bidder1 [6] => bidder1 )
逻辑说明
- 用空数组
$nameMap存储原始值和匿名标识的对应关系,通过引用传入匿名函数作用域,遍历过程中动态更新映射关系 - 遍历到未记录过的元素时,直接以当前映射表的长度+1作为编号,天然保证编号按元素首次出现的顺序分配
- 遍历过程直接返回元素对应的匿名标识,
array_map执行结束就得到最终结果,不需要额外遍历替换的步骤,比传统两次遍历的写法少一层循环,逻辑更紧凑。
内容的提问来源于stack exchange,提问作者Col ᴸᴬᴢᴬᴿᵁᴤ Smith
相关产品推荐
相关产品推荐

