好的 – 所以我正在创建一个动态的CSS样式表,我想用数组设置它.
这是我非常基本的数组.
$visual_css = array (
array(
"selector" => "body",
"property" => "background",
"value" => "#FFF",
"property2" => "color",
"value2" => "#000",
"type" => "css"
)
);
我现在想要创建样式表,但由于缺乏PHP知识,我遇到了问题.
foreach ($visual_css as $value) {
switch ($value['type']) {
case "css":
// Open selector
echo ( !empty($value['selector']) ? $value['selector'] . '{' : null );
foreach ($value as $key => $item) {
foreach ($value as $key2 => $item2) {
//Match only the id's against the key
if (preg_match('/^property/i', $key) && preg_match('/^value/i', $key2)) {
// First property
echo ( !empty($item) ? $item . ':' : null );
echo ( !empty($item2) ? $item2 . ';' : null );
}
}
}
// Close selector
echo ( !empty($value['selector']) ? '}' : null );
break;
}
}
body{background:#FFF;background:#000;color:#FFF;color:#000;}
这是期望的结果:
body{background:#FFF;color:#000;}
所以基本上,我希望能够创建无限数量的属性和值,并在它们之后加上一个递增的数字,并让代码写出来.
谁能帮我?
谢谢!
解决方法:
因此,我的方法使用多维数组而不是平面数组来嵌套子数组中选择器的属性.这样,通过首先遍历第一层,然后遍历每个父节点的子节点并为每个属性/值对组成CSS,您的方法更简洁.它还使迭代变得简单,而不是必须检查键的值以找到您所在的对.如果您需要不同的输出格式,您的迭代代码可以决定,并且它应该被排除在结构之外
$visual_css = array (
'body' => array(
'background' => '#FFF',
'color' => '#000'
)
);
$output = '';
foreach($visual_css as $k => $properties) {
if(!count($properties))
continue;
$temporary_output = $k . ' {';
$elements_added = 0;
foreach($properties as $p => $v) {
if(empty($v))
continue;
$elements_added++;
$temporary_output .= $p . ': ' . $v . '; ';
}
$temporary_output .= "}\n";
if($elements_added > 0)
$output .= $temporary_output;
}
echo $output;
// body {background: #FFF; color: #000; }