PHP如何将多维关联数组按语言键重新分组?
PHP多维关联数组按语言维度重组
原数组结构
$array = [ "name" => [ "ro" => [ 0 => "Nume Romana", ], "en" => [ 0 => "Nume Engleza", ], "fr" => [ 0 => "Nume Franceza", ], ], "meta_keywords" => [ "ro" => [ 0 => "keywords romana", ], "en" => [ 0 => "keywords Engleza", ], "fr" => [ 0 => "keywords Franceza", ], ], "meta_description" => [ "ro" => [ 0 => "desciption romana", ], "en" => [ 0 => "desciption Engleza", ], "fr" => [ 0 => "desc Franceza", ], ], ];
目标数组结构
$result = [ "ro" => [ "name" => "Nume Romana", "meta_keywords" => "keywords romana", "meta_description" => "desciption romana", ], "en" => [ "name" => "Nume Engleza", "meta_keywords" => "keywords Engleza", "meta_description" => "desciption Engleza", ], ];
实现代码
$result = []; // 遍历原数组的每个字段(name、meta_keywords等) foreach ($array as $field => $langValues) { // 遍历每个字段下的语言键值对 foreach ($langValues as $lang => $valueArr) { // 取出语言数组的第一个元素,赋值到结果数组对应位置 $result[$lang][$field] = $valueArr[0]; } } // 若仅需保留ro和en,可过滤掉其他语言 $result = array_intersect_key($result, array_flip(['ro', 'en']));
代码说明
- 外层循环遍历原数组的顶级字段,获取每个字段下的多语言数据集合;
- 内层循环遍历每个字段下的语言标识,将对应语言的第一个值(原结构中每个语言对应索引0的数组)映射到结果数组的
[语言标识][字段名]位置; - 最后通过
array_intersect_key可快速过滤出需要保留的语言项,比如示例中的fr可被剔除。
内容的提问来源于stack exchange,提问作者Adrian Costache
相关产品推荐
相关产品推荐

