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=>[…]非常混乱。[…]是另一个数组吗?因为正如我看到的,有些数组根本没有键,符号是数组值和结构的表示形式。是的,[…]是与以前相同的数组结构的重复。键的最后一个值是多少?因为您的转换器功能可能依赖于此。