我有一系列时区:
$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',
);
答案 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);