如何将PHP数组中的内层嵌套数组扁平化为字符串值?
将PHP数组中的内层单元素数组转为字符串值
输入数组
[ ["username" => "erick", "location" => ["singapore"], "province" => ["jatim"]], ["username" => "thomas", "location" => ["ukraina"], "province" => ["anonymouse"]] ]
预期输出
[ ["username" => "erick", "location" => "singapore", "province" => "jatim"], ["username" => "thomas", "location" => "ukraina", "province" => "anonymouse"] ]
实现方法
方法一:遍历处理每个用户数组
通过array_map遍历外层数组,对每个用户子数组的元素逐一检查,若为单元素数组则提取其唯一值:
$input = [ ["username" => "erick", "location" => ["singapore"], "province" => ["jatim"]], ["username" => "thomas", "location" => ["ukraina"], "province" => ["anonymouse"]] ]; $output = array_map(function($user) { foreach ($user as $key => $value) { // 判断是否为单元素数组 if (is_array($value) && count($value) === 1) { $user[$key] = reset($value); // 提取数组第一个元素(不依赖数字键) } } return $user; }, $input); // 输出结果 print_r($output);
方法二:嵌套array_map简化写法
利用array_combine结合嵌套array_map,一次性处理所有值的转换:
$output = array_map(function($user) { return array_combine( array_keys($user), array_map(function($val) { return is_array($val) && count($val) === 1 ? reset($val) : $val; }, $user) ); }, $input);
补充说明
- 如果内层数组可能为空,可添加判断逻辑返回默认值(比如空字符串):
count($value) === 1 ? reset($val) : (empty($val) ? '' : $val) reset()方法会返回数组的第一个元素,不管键名是数字还是字符串,比直接取$value[0]更通用。
内容的提问来源于stack exchange,提问作者Tech
相关产品推荐
相关产品推荐

