2010-06-21 12 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

+0

한 가지 이상의 방법이 있습니다 ... 오, 잠시만 기다려주세요. :) –