使用array_flip()可将数组值转为键,但重复值会被覆盖,仅保留最后一个;非标量值会引发警告。

PHP要将数组的值用作键,最直接且常用的方法就是使用
array_flip()
array_flip()
array_flip()
比如你有一个数组
$data = ['a' => 'apple', 'b' => 'banana'];
array_flip($data)
['apple' => 'a', 'banana' => 'b']
这听起来很简单,对吧?但这里有个小陷阱,也是我个人在实际开发中经常需要留意的点:如果你的原数组中存在重复的值,比如
$colors = ['red' => '#FF0000', 'green' => '#00FF00', 'dark_red' => '#FF0000'];
array_flip($colors)
['#FF0000' => 'dark_red', '#00FF00' => 'green']
'red'
'#FF0000'
'dark_red'
array_flip()
array_flip()
立即学习“PHP免费学习笔记(深入)”;
还有一个细节是,
array_flip()
array_flip()
<?php
$originalArray = [
'id_1' => 'Alice',
'id_2' => 'Bob',
'id_3' => 'Alice', // 重复值
'id_4' => 123
];
$flippedArray = array_flip($originalArray);
print_r($flippedArray);
/*
输出:
Array
(
[Alice] => id_3
[Bob] => id_2
[123] => id_4
)
*/
$nonScalarArray = [
'key1' => 'value1',
'key2' => ['nested_value'] // 非标量值
];
// array_flip($nonScalarArray); // 会产生警告:Warning: array_flip(): Can only flip STRING and INTEGER values!
?>array_flip()
这个问题其实非常关键,我在项目里就遇到过因为没搞清楚这个机制导致数据丢失的“小事故”。当
array_flip()
举个例子,假设你有一个用户列表,你希望通过用户名快速查找用户的ID:
$users = ['user_id_101' => '张三', 'user_id_102' => '李四', 'user_id_103' => '张三'];
array_flip($users)
['张三' => 'user_id_103', '李四' => 'user_id_102']
'user_id_101'
'user_id_103'
array_flip()
所以,在决定使用
array_flip()
array_flip()
虽然
array_flip()
一个比较常见且灵活的替代方法是手动遍历数组并构建新的数组。这给了我们极大的控制权,尤其是在处理重复值或者非标量值时。
比如,如果你想让重复的值对应一个包含所有原始键的数组,而不是简单地覆盖:
<?php
$originalArray = [
'user_id_101' => '张三',
'user_id_102' => '李四',
'user_id_103' => '张三',
'user_id_104' => '王五'
];
$flippedCustom = [];
foreach ($originalArray as $key => $value) {
if (!isset($flippedCustom[$value])) {
$flippedCustom[$value] = [];
}
$flippedCustom[$value][] = $key;
}
print_r($flippedCustom);
/*
输出:
Array
(
[张三] => Array
(
[0] => user_id_101
[1] => user_id_103
)
[李四] => Array
(
[0] => user_id_102
)
[王五] => Array
(
[0] => user_id_104
)
)
*/
?>这种手动循环的方式,虽然代码量比
array_flip()
array_flip()
另外,如果你已经有了两个独立的数组,一个作为新键的来源,一个作为新值的来源,那么
array_combine()
array_keys()
array_values()
array_flip()
至于非标量值(如对象、数组),
array_flip()
serialize()
json_encode()
数组键值转换,别看它只是一个简单的操作,但在实际
以上就是php如何将数组的值用作键?PHP数组值键转换实现的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号