扁平化多维数组连接键 [英] Flatten multidimensional array concatenating keys

查看:37
本文介绍了扁平化多维数组连接键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能的重复:
PHP 在连接键时将嵌套数组转换为单个数组?
递归获取数组的键并创建下划线分隔的字符串

请在回答之前阅读整个问题.

Please, read the whole question before answering.

我有这个多维数组:

$data = array(
    'user' => array(
        'email'   => 'user@example.com',
        'name'    => 'Super User',
        'address' => array(
            'billing' => 'Street 1',
            'delivery' => 'Street 2'
        )
    ),
    'post' => 'Hello, World!'
);

我想让它变平,变成:

$data = array(
    'user.email' => 'user@example.com',
    'user.name'  => 'Super User',
    'user.address.billing'  => 'Street 1',
    'user.address.delivery' => 'Street 2',
    'post'       => 'Hello, World!'
);

重要:

  • 钥匙对我来说非常很重要.我希望它们连接起来,用句点分隔.

  • The keys are very important to me. I want them concatenated, separated by periods.

它应该适用于任何级别的嵌套.

It should work with any level of nesting.

谢谢!

推荐答案

感谢所有给出的答案.

我做了如下改造,是改进版.它不需要根前缀,不需要使用引用,读起来更干净,而且名字更好:

I have transformed it in the following, which is an improved version. It eliminates the need of a root prefix, does not need to use references, it is cleaner to read, and it has a better name:

function array_flat($array, $prefix = '')
{
    $result = array();

    foreach ($array as $key => $value)
    {
        $new_key = $prefix . (empty($prefix) ? '' : '.') . $key;

        if (is_array($value))
        {
            $result = array_merge($result, array_flat($value, $new_key));
        }
        else
        {
            $result[$new_key] = $value;
        }
    }

    return $result;
}

这篇关于扁平化多维数组连接键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆