2012-07-19 53 views
0

我怎樣才能提取server_vps_de_dc1_s1此數組:PHP。如何提取新數組的數組鍵?

$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", 
    ... 
); 
+3

你將不得不使用大量的循環。你應該考慮重構你的代碼;這看起來不理想。 – Bojangles 2012-07-19 17:56:10

+4

看起來你不應該。 – 2012-07-19 17:56:53

回答

1

你需要遞歸:

function get_keys($array) 
{ 
    if(!is_array($array)) 
     return array(); 
    $k = key($array); 
    return array_merge(array($k), get_keys($array[$k])); 
} 

你'd像這樣調用它:

$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" } 

您可以與implode()形成新的價值觀:

$new_value = implode('_', $keys); // Outputs "vps_de_dc1_s1" 

Demo