没有不值得去解决的问题,也没有不值得去学习的技术!

在 PHP 中重命名数组键名的实现(基于函数 array_map)

转换后的数组结构如下,其键名为驼峰形式

作者:

在

, ,

1、现有的数组结构如下,其键名为小写字母加下划线的形式。

Plaintext

[
	[
		[id] => 97
		[theme_id] => vogue
		[version] => 
		[asset_key] => assets\iconfont\iconfont.css
		[mime_type] => text/plain
		[category] => unknown
		[schema] => 
		[created_at] => 2022-01-20 10:05:24
		[updated_at] => 2022-01-20 10:05:24
	]
	[
		[id] => 98
		[theme_id] => vogue
		[version] => 
		[asset_key] => assets\iconfont\iconfont.js
		[mime_type] => text/plain
		[category] => unknown
		[schema] => 
		[created_at] => 2022-01-20 10:05:24
		[updated_at] => 2022-01-20 10:05:24
	]
]

2、期望将数组键名调整为驼峰的形式,传统的方式就是基于 foreach 遍历,生成一个新的键名为驼峰形式的数组。这一次计划基于函数 array_map 实现。为数组的每个元素应用回调函数。

PHP

    public function __invoke($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo)
    {
        $themeId = $rootValue['themeAssets']['theme_id'];

        $themeAssets = ThemeAsset::where('theme_id', $themeId)->get()->toArray();

        $func = function($themeAsset) {
            return [
                'id' => $themeAsset['id'],
                'themeId' => $themeAsset['theme_id'],
                'version' => $themeAsset['version'],
                'content' => $themeAsset['content'],
                'key' => str_replace("\\", "/", $themeAsset['asset_key']),
                'mimeType' => $themeAsset['mime_type'],
                'category' => $themeAsset['category'],
                'schema' => $themeAsset['schema'],
                'createdAt' => $themeAsset['created_at'],
                'updatedAt' => $themeAsset['updated_at'],
            ];
        };

        $themeAssets = array_map($func, $themeAssets);

        return $themeAssets;
    }

3、转换后的数组结构如下,其键名为驼峰形式。如图1

转换后的数组结构如下,其键名为驼峰形式
图1
Plaintext

[
	[
		[id] => 97
		[themeId] => vogue
		[version] => 
		[key] => assets\iconfont\iconfont.css
		[mimeType] => text/plain
		[category] => unknown
		[schema] => 
		[createdAt] => 2022-01-20 10:05:24
		[updatedAt] => 2022-01-20 10:05:24
	]
	[
		[id] => 98
		[themeId] => vogue
		[version] => 
		[key] => assets\iconfont\iconfont.js
		[mimeType] => text/plain
		[category] => unknown
		[schema] => 
		[createdAt] => 2022-01-20 10:05:24
		[updatedAt] => 2022-01-20 10:05:24
	]
]

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系