在php中如何获取深度未知的多维数组的所有key
In php how to get all keys of multidimensional array with unknown depth
我需要从这个数组中获取所有的键。我尝试使用递归调用但只获取第一个元素键。我希望所有数组键都存储到具有级别的数组中。表示 keys[0] = array(540,198)
。下面是我要遍历并获取所有键的数组。我已经工作了超过 1 天,但没有得到任何东西,请帮助解决这个问题。
(
[ch] => Array
(
[540] => Array
(
[194] => Array
(
[16] => Array
(
[144] => Array
(
)
[145] => Array
(
)
[146] => Array
(
)
[147] => Array
(
)
[148] => Array
(
)
[195] => Array
(
)
[199] => Array
(
)
[149] => Array
(
)
[200] => Array
(
)
[150] => Array
(
)
[444] => Array
(
)
[151] => Array
(
)
[445] => Array
(
)
[446] => Array
(
)
[152] => Array
(
)
)
)
)
[198] => Array
(
[194] => Array
(
[16] => Array
(
[144] => Array
(
)
[145] => Array
(
)
[146] => Array
(
)
[147] => Array
(
)
[148] => Array
(
)
[195] => Array
(
)
[199] => Array
(
)
[149] => Array
(
)
[200] => Array
(
)
[150] => Array
(
)
[444] => Array
(
)
[151] => Array
(
)
[445] => Array
(
)
[446] => Array
(
)
[152] => Array
(
)
)
)
)
)
)
$this->checkProductConfiguraions($configuraion,$count,$levelKeys);
function checkProductConfiguraions($configuraion,$count,$levelKeys) {
foreach ($configuraions as $configuraion) {
if (is_array($configuraion)) {
$parentKeys = array_keys($configuraion);
if(isset($levelKeys[$count])){
$levelKeys[$count] = array_unique(array_merge($levelKeys[$count],$parentKeys));
} else {
$levelKeys[$count] = $parentKeys;
}
$count++;
$levelKeys[$count] = array();
for($i=0;$i<count($parentKeys);$i++){
$levelKeys[$count] = array_unique(array_merge($levelKeys[$count],array_keys($configuraion[$parentKeys[$i]])));
if(is_array($configuraion)){
$levelKeys = $this->checkProductConfiguraions($configuraion,$count,$levelKeys);
}
}
}
}
}
function check($configurations, $count = 0, $levelKeys = array())
{
foreach ($configurations as $k => $configuration) {
if (!array_key_exists($count, $levelKeys) ||
!in_array($k, $levelKeys[$count], true)) {
$levelKeys[$count][] = $k;
}
if (!empty($configuration)) {
$levelKeys = $this->check($configuration, $count + 1, $levelKeys);
}
}
return $levelKeys;
}
在第一轮中,我用第一个密钥填充 $levelKeys
变量。
在第一个 IF
中,我使用 in_array()
and array_key_exist()
来避免重复值。
如果我正在分析的数组有一个嵌套数组,我调用 check()
函数传递:嵌套数组,我达到的级别,levelKeys。
我需要从这个数组中获取所有的键。我尝试使用递归调用但只获取第一个元素键。我希望所有数组键都存储到具有级别的数组中。表示 keys[0] = array(540,198)
。下面是我要遍历并获取所有键的数组。我已经工作了超过 1 天,但没有得到任何东西,请帮助解决这个问题。
(
[ch] => Array
(
[540] => Array
(
[194] => Array
(
[16] => Array
(
[144] => Array
(
)
[145] => Array
(
)
[146] => Array
(
)
[147] => Array
(
)
[148] => Array
(
)
[195] => Array
(
)
[199] => Array
(
)
[149] => Array
(
)
[200] => Array
(
)
[150] => Array
(
)
[444] => Array
(
)
[151] => Array
(
)
[445] => Array
(
)
[446] => Array
(
)
[152] => Array
(
)
)
)
)
[198] => Array
(
[194] => Array
(
[16] => Array
(
[144] => Array
(
)
[145] => Array
(
)
[146] => Array
(
)
[147] => Array
(
)
[148] => Array
(
)
[195] => Array
(
)
[199] => Array
(
)
[149] => Array
(
)
[200] => Array
(
)
[150] => Array
(
)
[444] => Array
(
)
[151] => Array
(
)
[445] => Array
(
)
[446] => Array
(
)
[152] => Array
(
)
)
)
)
)
)
$this->checkProductConfiguraions($configuraion,$count,$levelKeys);
function checkProductConfiguraions($configuraion,$count,$levelKeys) {
foreach ($configuraions as $configuraion) {
if (is_array($configuraion)) {
$parentKeys = array_keys($configuraion);
if(isset($levelKeys[$count])){
$levelKeys[$count] = array_unique(array_merge($levelKeys[$count],$parentKeys));
} else {
$levelKeys[$count] = $parentKeys;
}
$count++;
$levelKeys[$count] = array();
for($i=0;$i<count($parentKeys);$i++){
$levelKeys[$count] = array_unique(array_merge($levelKeys[$count],array_keys($configuraion[$parentKeys[$i]])));
if(is_array($configuraion)){
$levelKeys = $this->checkProductConfiguraions($configuraion,$count,$levelKeys);
}
}
}
}
}
function check($configurations, $count = 0, $levelKeys = array())
{
foreach ($configurations as $k => $configuration) {
if (!array_key_exists($count, $levelKeys) ||
!in_array($k, $levelKeys[$count], true)) {
$levelKeys[$count][] = $k;
}
if (!empty($configuration)) {
$levelKeys = $this->check($configuration, $count + 1, $levelKeys);
}
}
return $levelKeys;
}
在第一轮中,我用第一个密钥填充 $levelKeys
变量。
在第一个 IF
中,我使用 in_array()
and array_key_exist()
来避免重复值。
如果我正在分析的数组有一个嵌套数组,我调用 check()
函数传递:嵌套数组,我达到的级别,levelKeys。