PHP 多维数组用 KEYS 展平

标签 php arrays multidimensional-array

有什么方法可以用键将多维(最多 1 到 3 级)展平吗?

我有一个这样的数组

    array(
        'Orange',
        'Grape',
        'Banana' => array(
            'Big',
            'Small'
        ),
        'Apple' => array(
            'Red',
            'Green' => array(
                'Soft',
                'Hard'
            )
        )
    );

我希望它是这样的

    array(
        'Orange',
        'Grape',
        'Banana',
        'Big',
        'Small',
        'Apple',
        'Red',
        'Green',
        'Soft',
        'Hard'
    );

所以它将保持出现的顺序,以便最近使用 array_keys 获取索引。

我已经尝试了几种方法,但是如果数组元素是新数组的键,它不会被展平,只是被跳过,所以我的最终数组看起来像这样

array:7 [▼
  0 => "Orange"
  1 => "Grape"
  2 => "Big"
  3 => "Small"
  4 => "Red"
  5 => "Soft"
  6 => "Hard"
]

最佳答案

你可以为此写一个递归函数:

$nested = array(
    'Orange',
    'Grape',
    'Banana' => array(
        'Big',
        'Small'
    ),
    'Apple' => array(
        'Red',
        'Green' => array(
            'Soft',
            'Hard'
        )
    )
);

function flattern($array)
{
    $flat=[];
    foreach($array as $key=>$val){
        if(is_array($val)){
            $flat[]=$key;
            $flat = array_merge($flat, flattern($val));
        }else{
            $flat[]=$val;
        }
    }
    return $flat;
}

var_dump(flattern($nested));

关于PHP 多维数组用 KEYS 展平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35293989/

相关文章:

javascript - 如何在javascript中循环多维 map

javascript - 通过 IF 语句解析数组时出错

java - 使用 PHP 中的 Java/.Net api

php - foreach 第二次没有获取数组数据

javascript - 缺少数组

javascript - Array.sort safari 问题

algorithm - 大网格上的熄灯拼图

php - 如何订阅或启用适用于 Bing Ads 的 Azure 应用程序?

PHP - 在循环中添加分隔符

javascript - 从任意深度的父/子关系中的所有对象中删除特定属性