Is it possible to pass array index names inside function

走远了吗. 提交于 2020-01-24 20:32:05

问题


I have small function which creates html output according to my $schema array structure.

Is it possible to have same output with my new array structure? (Is it possible to pass index names of arrays inside function)

My original array structure.

$schema = array(
    array(
        'tag' => 'div',
        'class' => 'lines',
        array(
            'tag' => 'div',
             array(
                'tag' => 'span',
                'style' => 'margin:10px; padding:10px',
                'key' => '$key-countryname',
            ),
            'key' => '$value-country',
        ),
        array(
            'tag' => 'div',
             array(
                'tag' => 'span',
                'style' => 'margin:10px; padding:10px',
                'key' => '$key-countryname',
            ),
            'key' => '$value-country',
        ),
    )
);

New array structure that I want to have same output with function

$schema = array(
    'div' => array(
        'class' => 'lines',
        'div' => array(
             'span' => array(
                'style' => 'margin:10px; border:10px',
                'key' => '$key-countryname',
            ),
            'key' => '$value-country',
        ),
        'layer' => array(
             'span' => array(
                'style' => 'margin:10px; border:10px',
                'key' => '$key-countryname',
            ),
            'key' => '$value-country',
        )
    )
);

My function

    $vals = array('Country Name' => 'Usa', 'Country Name' => 'Canada');

function get_output($schema, $vals, $t = -2){
    $t++; $tag = ""; $atts = array(); $keys = array(); $code = array();

    foreach($schema as $k => $v){        
        if(is_array($v)){
            $keys[] = get_output($v, $vals, $t);
        } else {
            switch($k){
                case "tag": $tag = $v; break;
                case "key": $keys[] = $v; break;
                case "type": break;
                default: $atts[$k] = $v; break;
            }
        }    
    }
    if(0 < $t){ $code[] = "\n".str_repeat("\t", $t); }
    if($tag){
        $code[] = "<$tag"; foreach($atts as $k=>$v){ $code[] = ' '.$k.'="'.$v.'"'; } $code[] = ">";
        $code = array(implode('', $code));
    }
    foreach($keys as $k){ $code[] = $k; } 
    if($tag){
        $code[] = "\n".str_repeat("\t", $t);
        $code[] = '</'.$tag.'>'; 
    }
    //print_r($code);
    return implode("", $code);
}

echo get_output($schema, $vals);

Thanks.

来源:https://stackoverflow.com/questions/18418228/is-it-possible-to-pass-array-index-names-inside-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!