0

我正在寻找一个函数来返回一个数组及其针对特定条件的所有子结构

标准:

  • php 5.6 兼容
  • 返回具有键名的数组的最后一个实例,!ENTITY其所有值都保持不变

样本数组:

对于多维数组,我们称之为$arr,对于这个示例结构,它有 6 层深,我们不应该假设它总是 6 层。

$arr = array("!ENTITY" =>
             array("!ENTITY" =>
                array("!ENTITY" =>
                    array("!ENTITY" =>
                        array("!ENTITY" =>
                            array("!ENTITY" =>
                                array("svg" => 
                                     array(
                                         0 => array("g" => "", "@id" => "Layer_2"),
                                         1 => array("g" => "", "@id" => "Layer_3"),
                                     ),
                                     "@version" => 1.2,
                                     "@id" => "Layer_1",
                                ),
                            "@different" => "layer"
                            ),
                        "@all" => "layer"
                        ),
                    "@here" => "layer"
                    ),
                "@goes" => "layer"
                ),
            "@else" => "layer"
            ),
   "@something" => "layer"
   );

预期输出:

我想返回最终数组,!ENTITY因为它的子结构完好无损。这是预期输出的示例:

Array
    (
        [svg] => Array
            (
                [0] => Array
                    (
                        [g] => 
                        [@id] => Layer_2
                    )

                [1] => Array
                    (
                        [g]
                        [@id] => Layer_3
                    )

            )

        [@version] => 1.2
        [@id] => Layer_1
    )
4

1 回答 1

2

如果发现如下所示,您将需要递归遍历数组并返回结果值:

<?php

function getLastValueForKey($data, $key){
    $res = '';
    foreach($data as $k => $value){
        $sub_res = is_array($value) ? getLastValueForKey($value, $key) : '';
        if($sub_res !== ''){
            $res = $sub_res;
        }else if($k === $key){
          $res = $value;
        }
    }
    return $res;
}
   
print_r(getLastValueForKey($arr, '!ENTITY'));

在线演示

于 2021-10-27T02:52:34.707 回答