2021-08-29 08:16:57
在PHP中,实现数组键值交换的核心方法是使用array_flip()函数,而array_change_key_case()仅用于调整键名大小写,无法直接完成键值互换。以下是具体说明和操作指南:
一、核心方法:array_flip()原数组的值必须为标量类型(字符串或整数),非标量值(如数组、对象)会导致警告且无法作为新键。
原数组的值需唯一,重复值会导致覆盖(仅保留最后一个匹配的键)。
无法直接用于键值互换,但可在array_flip()后对新键进行格式化处理。
过滤非标量值:使用array_filter()结合is_scalar()。$complexArray = ['id_1' => ['name' => 'Alice'], 'id_2' => new stdClass(), 'id_3' => 'Bob'];$scalarValuesArray = array_filter($complexArray, 'is_scalar');$flippedScalarArray = array_flip($scalarValuesArray);print_r($flippedScalarArray);// 输出:Array ( [Bob] => id_3 )
自定义转换逻辑:将复杂类型序列化为字符串(如json_encode()),但需确保唯一性。
构建值到键的映射数组:手动遍历原数组,将重复值对应的所有原始键存入子数组。$users = ['user1' => 'admin', 'user2' => 'editor', 'user3' => 'admin'];$rolesToMultipleUsers = [];foreach ($users as $key => $value) { $rolesToMultipleUsers[$value][] = $key;}print_r($rolesToMultipleUsers);// 输出:Array ( [admin] => Array ( [0] => user1 [1] => user3 ) [editor] => Array ( [0] => user2 ) )