php 根据字符串生成对应数组方法

来源:互联网 发布:sqlserver大数据处理 编辑:程序博客网 时间:2024/05/17 23:00

php 根据字符串生成对应数组方法

例如:

<?php$config = array(    'project|page|index' => 'content',    'project|page|nav' => array(            array(                'image' => '1.jpg',                'name' => 'home'            ),            array(                'image' => '2.jpg',                'name' => 'about'            )    ),    'project|page|open' => true);?>

根据$config生成以下数组

<?php$result = array(    'project' => array(        'page' => array(            'index' => 'content',            'nav' => array(                    array(                        'image' => '1.jpg',                        'name' => 'home'                    ),                    array(                        'image' => '2.jpg',                        'name' => 'about'                    )            ),            'open' => true        )        ));?>

方法:使用eval实现

<?php$config = array(    'project|page|index' => 'content',    'project|page|nav' => array(            array(                'image' => '1.jpg',                'name' => 'home'            ),            array(                'image' => '2.jpg',                'name' => 'about'            )    ),    'project|page|open' => true);$result = array();foreach($config as $key=>$val){        $tmp = '';    $keys = explode('|', $key);        for($i=0,$len=count($keys); $i<$len; $i++){        $tmp .= "['".$keys[$i]."']";    }        if(is_array($val)){        eval('$result'.$tmp.'='.var_export($val,true).';');    }elseif(is_string($val)){        eval('$result'.$tmp.'='.$val.';');    }else{        eval('$result'.$tmp.'=$val;');    }}print_r($result);?>

输出结果:

Array(    [project] => Array        (            [page] => Array                (                    [index] => content                    [nav] => Array                        (                            [0] => Array                                (                                    [image] => 1.jpg                                    [name] => home                                )                            [1] => Array                                (                                    [image] => 2.jpg                                    [name] => about                                )                        )                    [open] => 1                )        ))



0 0