2010-06-21 58 views
0

我的時區的數組:PHP:字符串分割數組多維數組

$timezones = array(
    'Africa/Abidjan', 
    'Africa/Accra', 
    ... 
    'America/Argentina/Buenos_Aires', 
    'America/Argentina/Catamarca', 
    ... 
    'Pacific/Wallis', 
    'UTC', 
); 

我怎樣才能最簡單的分割該陣列,使我得到一個這樣的:

$timezones = array(
    'Africa' => array('Abidjan', 'Accra', ...), 
    'America' => array(..., 'Argentina' => array('Buenos_Aires', 'Catamarca', ...), ...), 
    ... 
    'Pacific' => array(..., 'Wallis'), 
    'UTC', 
); 

回答

3
$splitted = array(); 
foreach ($timezones as $timezone) 
{ 
    $items = explode('/', $timezone); 
    add_to_array($splitted, $items); 
} 
print_r($splitted); 

function add_to_array(& $destination, $values) 
{ 
    if (count($values) == 1) 
    { 
     $destination[] = $values[0]; 
    } 
    else 
    { 
     $first = array_shift($values); 
     add_to_array($destination[$first], $values); 
    } 
} 
使用 eval()
0

非遞歸的hackish版本:

$output = array(); 

foreach ($timezones as $zone) { 
    if (strpos($zone, '/') !== FALSE) { 
     $str = preg_replace('#/([^/]+)$#', "'][] = '$1';", $zone); 
     $str = str_replace('/', "']['", $str); 
     $str = '$output[\''.$str; 
     eval($str); 
    } else { 
     $output[$zone] = ''; 
    } 
} 
print_r($output); 
+0

這是'str_replace('a','i','eval');';) – Gordon 2010-06-21 11:33:42

+0

有更多的方法......哦,等等,它只是爲了好玩:) – 2010-06-21 12:07:36