array_flip翻转数组键值时要求原值必须为string或integer且唯一,否则会警告、丢数据或覆盖;浮点数和布尔值会隐式转换导致冲突,建议翻转前用is_string||is_int过滤。

array_flip 会把数组的键和值互换,但不是所有数组都能安全翻转——核心限制是:新键必须是 string 或 integer,且不能重复;否则会丢数据、报错或行为异常。
键值类型不合法导致静默截断或报错
如果原数组的值是 array、object、resource 或 null,PHP 无法将其作为键,会触发警告(E_WARNING),并跳过该元素。例如:
$original = ['a' => [], 'b' => new stdClass(), 'c' => 'ok']; var_dump(array_flip($original)); // Warning: array_flip(): Can only flip STRING and INTEGER values! // 结果只保留 ['ok' => 'c'],前两个被忽略值重复时后出现的覆盖先出现的
翻转本质是“用原值作新键”,而 PHP 数组键必须唯一。当多个原值相同时,只有最后一个对应键值对生效,前面的会被覆盖:
AiFreePhp(爱免费php企业建站程序是一个免费开源的PHP建站程序),基于PHP + MYSQL 与模板技术,具有产品展示,文章栏目,下载管理,友情链接等功能。无任何限制功能,程序简单实用,可用于中小企业网站建设,不收取任何费用。使用本程序,不可将程序变相转售,二次开发发布。 运行安装目/install/index.php一般要求安装在站点的根目录,不是根目录有试过有没有问题,请大家尽量以
浮点数和布尔值作为值时隐式转换易出错
原数组值若为 float 或 bool,翻转时会按 PHP 键类型规则强制转换:
立即学习“PHP免费学习笔记(深入)”;
- false → 转成整型 0(作为键)
- true → 转成整型 1
- float 1.0 / 0.0 → 分别转成整型 1 / 0,可能与已有整数键冲突
空字符串、数字字符串等边界值需特别注意
看似合法的值也可能引发意外:
- ''(空字符串) 和 '0' 在松散比较下相等,但作为键是不同的;不过若与其他值翻转后撞键,仍会覆盖
-
'123' 这类纯数字字符串,翻转后自动转为整型键 123(仅当开启
zend.ze1_compatibility_mode且已废弃,现代 PHP 默认不转) - 实际建议:翻转前用
is_string($v) || is_int($v)过滤,或用array_filter($arr, 'is_scalar')预处理










