PHP多维数组压缩

PHP多维数组压缩,php,multidimensional-array,Php,Multidimensional Array,我将这样的数组用于静态文件缓存: [ key => data => [ key1 => data => [...] => expires => 123456 key2 => data => [...] => expires => 123456 ] => expir

我将这样的数组用于静态文件缓存:

[
  key => data => [
             key1 => data    => [...]
                  => expires => 123456
             key2 => data    => [...]
                  => expires => 123456
         ]
      => expires => 123456
]
这可能有很多层深(有时是10-15层)

我想做的是只返回数据的值,例如,创建这样的数组

[
    key => key1 => [...]
        => key2 => [...]
]
我该怎么做

编辑

结构的打印

Array ( 
[key] => 
    Array (
    [data] => 
        Array (
        [key1] => 
            Array (
            [data] => Array ( ... )
            [expires] => 12345678)
        [key2] =>
            Array (
                [data] => Array ( ... )
                [expires] => 12345678
            )
        ) 
    [expires] => 12345678
    )
)

您可以像这样使用递归函数:

function extractValues($array, &$result){

    foreach($array as $key1 => $val1){
        if($key1 == 'data' && is_array($val1)) {
            foreach($val1 as $key2 => $val2){

                if(is_array($val2)) {
                    $result[$key2] = array();
                    extractValues($val2, $result[$key2]);
                } else {
                    $result[$key2] = $val2;
                }
            }
        } else if(!in_array($key1, array('expires'))) {
            $result[$key1] = array();
            extractValues($val1, $result[$key1]);
        }

    }

    return $result;
}
$test = array(
    'key' => array(
        'data' => array(
            'key1' => array(
                'data' => array(
                    'key11' => 11,
                    'key12' => 12,
                ),
            ),
            'key2' => array(
                'data' => array(
                    'key21' => 21,
                    'key22' => 22,
                ),
            ),
        ),
        'expires' => 12345,
    ),
);

$result = array();
extractValues($test, $result);
var_dump($result);
它将在如下阵列结构上工作:

function extractValues($array, &$result){

    foreach($array as $key1 => $val1){
        if($key1 == 'data' && is_array($val1)) {
            foreach($val1 as $key2 => $val2){

                if(is_array($val2)) {
                    $result[$key2] = array();
                    extractValues($val2, $result[$key2]);
                } else {
                    $result[$key2] = $val2;
                }
            }
        } else if(!in_array($key1, array('expires'))) {
            $result[$key1] = array();
            extractValues($val1, $result[$key1]);
        }

    }

    return $result;
}
$test = array(
    'key' => array(
        'data' => array(
            'key1' => array(
                'data' => array(
                    'key11' => 11,
                    'key12' => 12,
                ),
            ),
            'key2' => array(
                'data' => array(
                    'key21' => 21,
                    'key22' => 22,
                ),
            ),
        ),
        'expires' => 12345,
    ),
);

$result = array();
extractValues($test, $result);
var_dump($result);
这是var_dump()的结果,希望满足您的要求:

array(1) {
  ["key"]=>
  array(2) {
    ["key1"]=>
    array(2) {
      ["key11"]=>
      int(11)
      ["key12"]=>
      int(12)
    }
    ["key2"]=>
    array(2) {
      ["key21"]=>
      int(21)
      ["key22"]=>
      int(22)
    }
  }
}

这个符号看起来不像php…你能通过编辑上面的问题让数组结构更清晰一些吗:我猜每个数组都包含一个名为data的元素,你想去掉它吗?是的,key1=>data=>[…]非常混乱。[…]是另一个数组吗?因为正如我看到的,有些数组根本没有键,符号是数组值和结构的表示形式。是的,[…]是与以前相同的数组结构的重复。键的最后一个值是多少?因为您的转换器功能可能依赖于此。