PHP:将字符串数组拆分为多维数组

时间:2010-06-21 09:40:27

标签: php arrays string multidimensional-array

我有一系列时区:

$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',
);

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

使用eval()的非递归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);