Php 仅使用键将多维数组转换为文本

Php 仅使用键将多维数组转换为文本,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个这样的数组: $array = [ "Darren" => [ "age" => "18", "work" => [ "occupation" => "developer", "company" => "ABC Ltd" ] ], "John" => [

我有一个这样的数组:

$array = [
        "Darren" => [
            "age" => "18",
            "work" => [
                "occupation" => "developer",
                "company" => "ABC Ltd"
            ]
        ],
        "John" => [
            "age" => "24",
            "work" => [
                "occupation" => "developer",
                "company" => "ABC Ltd",
                "url" => "www.example.com"
            ],
        ]
    ]
并希望根据阵列的层次结构,在关键点之间合并一个点:

       "Darren.age"
       "Darren.work.occupation"
       "Darren.work.company"
       ...
到目前为止,我所做的功能是

    public function buildExpressionKey($array, $parentKey = null){

        $expression = [];

        foreach($array as $key=>$value){

            if(is_array($value)){
               array_push($expression, $parentKey. implode(".", 
$this->buildExpressionKey($value, $key)));
           }else{
               array_push($expression, $key);
           }
       }

       return $expression;
   }
此时它正在返回此值:

  [
    [0] => "age.Darrenoccupation.company"
    [1] => "age.Johnoccupation.company.url"
  ]

我想知道是否有可能制作一个自动合并按键的功能,就像这样,提前谢谢:)

您当前的要求:

<?php

$people =
[
 'John' => 
    [
        'Occupation' => 'Developer',
        'Age' => 18
    ],
'Darren' =>
    [
        'Occupation' => 'Manager',
        'Age' => 40
    ]
];


foreach($people as $name => $value)
    foreach($value as $k => $v)
        $strings[] = $name . '.' . $k;

var_export($strings);

已设法解决此问题:)


在此处找到类似的内容:

到目前为止您尝试了什么?先发布您的尝试它可以有两个以上的维度-发布扩展输入数组并清楚显示嵌套键之间的关系您是否尝试重命名键?出于某种原因,可能要展平多维数组?请给我们一个您预期输出的示例,即当它有两个以上维度时。报价可能重复形成问题:我希望有一个通过自定义函数自动完成的可扩展方法。所以它可以有两个以上的维度。@PhilippMaurer将上述内容包装在一个函数中是微不足道的。但我怀疑OP实际上想做的不仅仅是生成一些字符串。等待更正/澄清。
array (
  0 => 'John.Occupation',
  1 => 'John.Age',
  2 => 'Darren.Occupation',
  3 => 'Darren.Age',
)
/**
 * @param $array
 * @return array
 */
public function buildExpressionKey($array){

    $iterator = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($array));
    $keys = array();
    foreach ($iterator as $key => $value) {
        // Build long key name based on parent keys
        for ($i = $iterator->getDepth() - 1; $i >= 0; $i--) {
            $key = $iterator->getSubIterator($i)->key() . '.' . $key;
        }
        $keys[] = $key;
    }
    return $keys;
}