使用array_fill_keys可将字符串分割后的数组元素作为键并赋默认值,结合explode、trim、array_unique等函数可灵活处理分隔符、空格和重复键问题,适用于权限初始化、数据统计等场景。

要在PHP中将一个字符串转换为键值对数组,如果你的目的是让字符串中的每个独立元素都成为一个键,并且为这些键赋一个相同的默认值,那么
array_fill_keys()
array_fill_keys()
假设你有一个包含多个标签或标识符的字符串,它们以逗号分隔,比如
'php,javascript,mysql,html'
true
0
explode()
array_fill_keys()
<?php
$tagString = 'php,javascript,mysql,html';
$tagsArray = explode(',', $tagString); // 将字符串按逗号分割成数组
// 使用 array_fill_keys 将数组元素作为键,并赋默认值
$keyValueArray = array_fill_keys($tagsArray, true);
print_r($keyValueArray);
/*
输出结果:
Array
(
[php] => 1
[javascript] => 1
[mysql] => 1
[html] => 1
)
*/
// 如果你想要一个默认的空字符串值
$keyValueArrayWithEmptyString = array_fill_keys($tagsArray, '');
print_r($keyValueArrayWithEmptyString);
/*
输出结果:
Array
(
[php] =>
[javascript] =>
[mysql] =>
[html] =>
)
*/
// 假设字符串中可能有多余的空格,需要先清理
$dirtyTagString = ' php , javascript , mysql , html ';
$cleanTagsArray = array_map('trim', explode(',', $dirtyTagString));
$cleanedKeyValueArray = array_fill_keys($cleanTagsArray, true);
print_r($cleanedKeyValueArray);
/*
输出结果:
Array
(
[php] => 1
[javascript] => 1
[mysql] => 1
[html] => 1
)
*/
?>当然,
array_fill_keys
explode()
preg_split()
str_split()
explode()
explode()
explode(',', 'apple,banana,cherry')array_filter()
立即学习“PHP免费学习笔记(深入)”;
preg_split()
preg_split()
preg_split('/[\s,]+/', 'item1 item2,item3')explode()
str_split()
str_split('hello', 2)['he', 'll', 'o']
选择哪个函数,完全取决于你字符串的结构和你的具体需求。很多时候,这些函数是配合使用的,比如先
explode
array_map
array_fill_keys
array_fill_keys
首先,键的唯一性。
array_fill_keys
['apple', 'banana', 'apple']
array_fill_keys
apple
array_unique()
其次,键的类型。PHP 数组的键可以是整数或字符串。如果你的输入数组元素是数字字符串(例如
'123'
123
array_fill_keys
再来,默认值的选择。
array_fill_keys
true
false
0
最后,空输入和性能。如果传递给
array_fill_keys
array_fill_keys
array_fill_keys
一个常见的场景是权限管理或配置项的初始化。假设你有一个用户角色列表字符串,比如
'admin,editor,viewer'
false
<?php
$roleString = 'admin,editor,viewer';
$roles = array_map('trim', explode(',', $roleString));
// 初始化所有角色的权限为 false
$defaultPermissions = array_fill_keys($roles, false);
print_r($defaultPermissions);
/*
输出:
Array
(
[admin] =>
[editor] =>
[viewer] =>
)
*/
// 假设我们现在知道admin和editor角色有'manage_posts'权限
$defaultPermissions['admin'] = ['manage_posts' => true, 'edit_users' => true];
$defaultPermissions['editor'] = ['manage_posts' => true];
print_r($defaultPermissions);
/*
输出:
Array
(
[admin] => Array
(
[manage_posts] => 1
[edit_users] => 1
)
[editor] => Array
(
[manage_posts] => 1
)
[viewer] =>
)
*/
?>在这个例子中,
array_fill_keys
另一个例子是数据清洗和规范化。有时我们从外部系统获取的数据,其中的一些标识符或状态码可能以字符串形式存在,我们需要将其转换为一个映射表,以便快速查找和处理。比如,一个日志文件中包含了一系列事件类型,你想统计每种事件的发生次数,或者只是想快速判断某个事件类型是否在预设列表中。
<?php
$eventTypesString = 'login_success,login_fail,logout,session_timeout,login_fail'; // 故意包含重复
$eventTypes = array_map('trim', explode(',', $eventTypesString));
// 如果我们只是想知道有哪些独特的事件类型,并给它们一个默认的计数0
$eventCounts = array_fill_keys(array_unique($eventTypes), 0);
// 接着,我们可以遍历原始事件列表进行计数
foreach ($eventTypes as $event) {
if (isset($eventCounts[$event])) {
$eventCounts[$event]++;
}
}
print_r($eventCounts);
/*
输出:
Array
(
[login_success] => 1
[login_fail] => 2
[logout] => 1
[session_timeout] => 1
)
*/
?>这里,
array_unique()
array_fill_keys()
总的来说,
array_fill_keys
以上就是如何在PHP中将字符串转为键值对数组?array_fill_keys详解的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号