如何从多维数组生成键唯一的键值对数组
如何从多维数组中提取所有唯一键的键值对?
嘿,这事儿不难搞定!你要的就是把嵌套的多维数组“扁平化”,只保留最底层的键值对,还得保证所有键都是唯一的。先把你的需求再明确下:
输入示例:
$inputArray = [ 'fruit' => [ 'apple' => 'red', 'banana' => 'Yellow' ], 'flower' => [ 'rose' => 'red' ] ];
期望输出:
[ 'apple' => 'red', 'banana' => 'Yellow', 'rose' => 'red' ]
接下来给你个通用的解决方案,用递归函数就能处理任意深度的嵌套数组:
function flattenUniqueArray($array) { $result = []; foreach ($array as $key => $value) { // 如果当前元素还是数组,就递归处理 if (is_array($value)) { $result = array_merge($result, flattenUniqueArray($value)); } else { // 直接把键值对加入结果,重复的键会自动覆盖前面的(保证唯一) $result[$key] = $value; } } return $result; } // 调用示例 $flattenedArray = flattenUniqueArray($inputArray); print_r($flattenedArray);
代码逻辑说明:
- 递归遍历数组的每一个元素:如果遇到嵌套数组,就继续深入处理;如果是普通的键值对,就直接加入结果数组。
- 用
array_merge把递归返回的扁平化数组合并到结果里,当键重复时,后面的键值会覆盖前面的,刚好满足“所有键唯一”的要求。
如果你的需求里,遇到重复键时不想覆盖,而是跳过新的键值,可以把$result[$key] = $value;改成下面这样:
if (!isset($result[$key])) { $result[$key] = $value; }
这样就只会保留第一个出现的键值对啦!
内容的提问来源于stack exchange,提问作者pooja desai
相关产品推荐
相关产品推荐

