PHP。如何提取新数组的数组键?

PHP。如何提取新数组的数组键?,php,arrays,Php,Arrays,如何从该阵列中提取服务器\u vps\u de\u dc1\u s1: $server = array( "vps" => array ( "de" => array ( "dc1" => array ( "s1" => array ( "name"=&g

如何从该阵列中提取
服务器\u vps\u de\u dc1\u s1

$server = array(    
    "vps" => array (        
        "de" => array (     
            "dc1" => array (                
                "s1" => array (                 
                    "name"=>    "Xen VPS 200",
                    "processor"=>   "200 MHz",
                    "memory"=>  "200 MB",
                ),                  
            ),              
        ),              
    ),              
    "dedicated" => array (      
        ...
    ),    
);
要构建与此类似的新阵列,请执行以下操作:

$server_id = array(    
    "1" => "server_vps_de_dc1_s1",
    "2" => "server_vps_de_dc1_s2",
    "3" => "server_vps_de_dc2_s1",
    "4" => "server_vps_usa_dc1_s1",
    ...
);
您需要递归:

function get_keys( $array)
{
    if( !is_array( $array)) 
        return array();
    $k = key( $array);
    return array_merge( array( $k), get_keys( $array[$k]));
}
您可以这样调用它:

$keys = get_keys( $array);
array_pop( $keys); // Get rid of the last key:
您将得到以下输出:

array(4) { [0]=> string(3) "vps" [1]=> string(2) "de" [2]=> string(3) "dc1" [3]=> string(2) "s1" } 
您可以使用
内爆()
形成新值:


您将不得不使用许多循环。你应该考虑重构你的代码;这看起来不太理想。
$new_value = implode( '_', $keys); // Outputs "vps_de_dc1_s1"