$schema 配列構造に従って html 出力を作成する小さな関数があります。
新しい配列構造で同じ出力を持つことは可能ですか? (関数内で配列のインデックス名を渡すことは可能ですか)
私の元の配列構造。
$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',
),
)
);
関数と同じ出力をしたい新しい配列構造
$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',
)
)
);
私の機能
$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);
ありがとう。