1

我正在使用这样的数组作为静态文件缓存:

[
  key => data => [
             key1 => data    => [...]
                  => expires => 123456
             key2 => data    => [...]
                  => expires => 123456
         ]
      => expires => 123456
]

这可以是许多级别的深度(有时是 10-15 级别)。

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

[
    key => key1 => [...]
        => key2 => [...]
]

我该怎么做?

编辑

print_r结构的

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

1 回答 1

0

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

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)
    }
  }
}
于 2012-11-27T09:36:10.663 回答