代码之家  ›  专栏  ›  技术社区  ›  Svish

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

  •  0
  • Svish  · 技术社区  · 14 年前

    我有一系列时区:

    $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 回复  |  直到 7 年前
        1
  •  3
  •   Sjoerd    14 年前
    $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);
        }
    }
    
        2
  •  0
  •   Matteo Riva    14 年前

    eval() :

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